- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
@Service
public class MyService {
@Autowired
MyComponent myComponent;
public String serve() {
myComponent.doWork();
return "success";
}
}
作为《quarkus依赖注入》的开篇,本文先介绍CDI,再学习如何创建bean实例,全文内容如下
本篇内容官方提醒CDI创建bean关于CDI关于bean注解修饰在类上注解修饰在方法上注解修饰在成员变量上扩展组件中的synthetic bean
学习quarkus的依赖注入之前,来自官方的提醒非常重要
Quarkus is designed with Substrate VM in mind. For this reason, we encourage you to use *package-private* scope instead of *private*.
名称 | 链接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
package com.bolingcavalry;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;
@Path("/actions")
public class HobbyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy, " + LocalDateTime.now();
}
}
@Component
public class MyComponent {
public void doWork() {}
}
package com.bolingcavalry.service.impl;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class ClassAnnotationBean {
public String hello() {
return "from " + this.getClass().getSimpleName();
}
}
package com.bolingcavalry;
import com.bolingcavalry.service.impl.ClassAnnotationBean;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;
@Path("/classannotataionbean")
public class ClassAnnotationController {
@Inject
ClassAnnotationBean classAnnotationBean;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return String.format("Hello RESTEasy, %s, %s",
LocalDateTime.now(),
classAnnotationBean.hello());
}
}
package com.bolingcavalry;
import com.bolingcavalry.service.impl.ClassAnnotationBean;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.containsString;
@QuarkusTest
class ClassAnnotationControllerTest {
@Test
public void testGetEndpoint() {
given()
.when().get("/classannotataionbean")
.then()
.statusCode(200)
// 检查body内容,是否含有ClassAnnotationBean.hello方法返回的字符串
.body(containsString("from " + ClassAnnotationBean.class.getSimpleName()));
}
}
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.702 s
[INFO] Finished at: 2022-03-12T15:48:45+08:00
[INFO] ------------------------------------------------------------------------
@Component
public class Calculator {
public int sum(int a, int b) {
return a+b;
}
@Bean
public MyBean myBean() {
return new MyBean();
}
}
package com.bolingcavalry.service;
public interface HelloService {
String hello();
}
package com.bolingcavalry.service.impl;
import com.bolingcavalry.service.HelloService;
public class HelloServiceImpl implements HelloService {
@Override
public String hello() {
return "from " + this.getClass().getSimpleName();
}
}
package com.bolingcavalry.service.impl;
import com.bolingcavalry.service.HelloService;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
public class MethodAnnonationBean {
@Produces
@ApplicationScoped
public HelloService getHelloService() {
return new HelloServiceImpl();
}
}
package com.bolingcavalry;
import com.bolingcavalry.service.HelloService;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;
@Path("/methodannotataionbean")
public class MethodAnnotationController {
@Inject
HelloService helloService;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String get() {
return String.format("Hello RESTEasy, %s, %s",
LocalDateTime.now(),
helloService.hello());
}
}
package com.bolingcavalry;
import com.bolingcavalry.service.impl.HelloServiceImpl;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.containsString;
@QuarkusTest
class MethodAnnotationControllerTest {
@Test
public void testGetEndpoint() {
given()
.when().get("/methodannotataionbean")
.then()
.statusCode(200)
// 检查body内容,HelloServiceImpl.hello方法返回的字符串
.body(containsString("from " + HelloServiceImpl.class.getSimpleName()));
}
}
public class MethodAnnonationBean {
@Produces
@ApplicationScoped
public HelloService getHelloService(OtherService otherService) {
return new HelloServiceImpl();
}
}
public class MethodAnnonationBean {
@ApplicationScoped
public HelloService getHelloService() {
return new HelloServiceImpl();
}
}
package com.bolingcavalry.service.impl;
import com.bolingcavalry.service.HelloService;
public class OtherServiceImpl {
public String hello() {
return "from " + this.getClass().getSimpleName();
}
}
package com.bolingcavalry.service.impl;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
public class FieldAnnonationBean {
@Produces
@ApplicationScoped
OtherServiceImpl otherServiceImpl = new OtherServiceImpl();
}
@Path("/fieldannotataionbean")
public class FieldAnnotationController {
@Inject
OtherServiceImpl otherServiceImpl;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String get() {
return String.format("Hello RESTEasy, %s, %s",
LocalDateTime.now(),
otherServiceImpl.hello());
}
}
@BuildStep
@Record(STATIC_INIT)
SyntheticBeanBuildItem syntheticBean(TestRecorder recorder) {
return SyntheticBeanBuildItem.configure(Foo.class).scope(Singleton.class)
.runtimeValue(recorder.createFoo("parameters are recorder in the bytecode"))
.done();
}
我已经使用 将资源添加到类路径中 -H:IncludeResources=.*/kubernetes_auth.crt$ -H:Log=registerResource:verbose 当我构建图像时
我正在阅读 Quarkus documentation about configuration ,这引起了我的注意: Quarkus does much of its configuration an
我有一系列简单的链式操作,它们使用在 Quarkus 服务中运行的 Panache 存储库检索和保存一些数据。这些操作并行化的地方是 ContextNotActiveException被抛出。在删除并
我最近开始在我的 Quarkus 网络应用程序中使用 testcontantainers 进行单元/集成测试数据库操作。它工作正常,除了我想不出在 quarkus.datasource.url 应用程
我想更改 Quarkus 应用程序的日志记录级别。 如何从配置文件或在运行时执行此操作? 最佳答案 控制根日志记录级别的属性是 quarkus.log.level (默认为 INFO )。 此属性可以
我正在寻找一种方法来在运行时更改 Quarkus 应用程序 (JVM) 的一个或多个类/包的日志级别。是否有我可以用来以编程方式更改级别的 API,例如通过公开 REST API 还是已经存在其他解决
我已经使用 Quarkus 开发模式 ( mvn quarkus:dev ) 启动了我的应用程序,我希望能够调试它。 怎么能这样? 最佳答案 只需使用 mvn quarkus:dev 启动 Quark
在我当前的项目中,我们将用户登录信息存储在 MongoDB 集合中。我们希望实现一种身份验证机制,根据存储在所述 MongoDB 中的信息检查请求中的凭据。有一个教程可以做到这一点with JPA +
我的 application.properties 文件中有一些配置: ... quarkus.datasource.url=jdbc:postgresql://...:5432/.... quark
在夸库斯 Application Configuration Guide它提到了如何使用配置文件配置应用程序(例如%dev.quarkus.http.port=8181)。 但是有没有办法访问配置文件
我希望我的 Quarkus 应用程序在默认端口以外的端口上运行。我怎样才能做到这一点? 最佳答案 要使用的 Quarkus 配置属性是 quarkus.http.port(默认值为 8080)。如果在
Quarkus getting started unittest描述如何模拟注入(inject)的服务。然而,当尝试将此应用于注入(inject)的休息客户端时,这似乎不起作用。 在我的应用程序中,要
我曾尝试在 Quarkus 中添加 logback,但后来发现 Quarkus 不支持 logback。如果我错了,我可以通过示例知道如何在 Quarkus 中配置 logback 吗?提前致谢。 最
在使用 Quarkus Restclient/RESTEasy 进行集成测试时,我们希望在运行时覆盖 url 和端口。这样做的原因是,如果我们并行构建多个模块,我们需要使用随机端口,否则我们会遇到端口
我正在尝试将 JEE 服务迁移到 Quarkus想知道如何在 Quarkus 应用程序中获取线程工厂。只需创建一个像 javaExecutors.defaultThreadFactory();就像在
我正在使用 quarkus 1.2.0。 一般: 客户端浏览器向服务器请求数据。服务器(Quarkus 应用程序)正在从客户端接收 UTC 时间。 (ok) 现在服务器应该将数据库中的数据与客户端浏览
我试图找到一种方法如何在 quarkus DI 中以编程方式创建 bean,但没有成功。在这个框架下可以吗?看来BeanManager尚未实现所需的方法。 最佳答案 首先,我们应该澄清“以编程方式创建
我创建了以下调用类,当调用拦截的方法时,应该调用它: import javax.interceptor.AroundInvoke; import javax.interceptor.Intercept
我正在尝试将多模块 Maven 项目从普通 Java EE 8 转换为 Quarkus,并且 ArcAnnotationProcessor 似乎会抛出有关引用位于不同位置的依赖项的所有注入(injec
我们如何在 Quarkus 中使用 jasypt 加密和解密属性文件中的数据库密码。解密将在加载或启动应用程序时发生。请分享您对此的意见或想法。 @chrisgleissner 非常感谢任何帮助。 应
我是一名优秀的程序员,十分优秀!