带自动连线的Spring纯注释
我正在尝试对Spring进行完整的注释(无xml)实现。未填充自动连线成员。根据我的研究,有三件事要做:带自动连线的Spring纯注释,spring,spring-annotations,Spring,Spring Annotations,我正在尝试对Spring进行完整的注释(无xml)实现。未填充自动连线成员。根据我的研究,有三件事要做: 设置一个管理bean的配置文件 使用@Autowired将bean获取到文件中 实例化一个应用程序上下文以获得进展 很难找到一个只使用注释的完整示例,因此我没有太多参考。大多数示例至少使用一些xml 没有错误消息,所以我不知道问题出在哪里。该值仅为null。这是我的档案: Trial.java public class Trivial { public TrivialBean
- 设置一个管理bean的配置文件
- 使用
将bean获取到文件中@Autowired
- 实例化一个应用程序上下文以获得进展
public class Trivial {
public TrivialBean trivialBean;
@Autowired
public void setTrivialBean(TrivialBean trivialBean) {
this.trivialBean = trivialBean;
}
public static void main(String...args) {
ApplicationContext context
= new AnnotationConfigApplicationContext(
TrivialConfig.class);
new Trivial().go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}
java
public class TrivialBean {
public String foo = "TEST TEST TEST";
@Override
public String toString() {
return foo;
}
}
xml.config.java
@Configuration
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}
我希望它能输出
trialitbean:TEST-TEST
,但它只是输出trialitbean:null
对于在trialit中的@Autowired
要工作,您需要用Spring实例化trialit
<代码>新建平凡()不起作用。为了使您的样品发挥作用,我认为您需要以下几点:
triple
配置为beannew triality()
更改为context.getBean(trialit.class)
context.getBean
被认为是不好的做法。在基于注释的容器配置中进行常规自动连接
为了使自动连接工作,必须由Spring容器管理Trial
实例的生命周期
示例
java也是一样的
xml.config.java
@Configuration
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}
Trial.java
public class Trivial {
public TrivialBean trivialBean;
@Autowired
public void setTrivialBean(TrivialBean trivialBean) {
this.trivialBean = trivialBean;
}
public static void main(String...args) {
ApplicationContext context
= new AnnotationConfigApplicationContext(
TrivialConfig.class);
new Trivial().go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}
输出
请参阅Spring文档以了解有关的更多信息
AspectJ编译时编织和@Configurable 可以将
Tritile Bean
实例自动关联到new
创建的Tritile
实例中
springaspects.jar
包含一个注释驱动的方面,它允许在容器控制之外创建对象的依赖项注入。但是,它不应该用于基于Spring的新项目中。它旨在用于遗留项目,因为某些原因,有些实例是在Spring容器之外创建的
Spring 4.2.0(目前最新版本)、AspectJ 1.8.6(目前最新版本)、Maven和Java 1.8的示例。
对spring方面
和aspectjrt
java也是一样的
xml.config.java
@Configuration
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}
类似于
。它向当前应用程序上下文发出信号,以将依赖项注入应用到Springbean工厂外部实例化的类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
@Configuration
@EnableSpringConfigured
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}
Trial.java
public class Trivial {
public TrivialBean trivialBean;
@Autowired
public void setTrivialBean(TrivialBean trivialBean) {
this.trivialBean = trivialBean;
}
public static void main(String...args) {
ApplicationContext context
= new AnnotationConfigApplicationContext(
TrivialConfig.class);
new Trivial().go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}
将弹簧驱动配置应用于普通
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@Configurable
public class Trivial {
public TrivialBean trivialBean;
@Autowired
public void setTrivialBean(TrivialBean trivialBean) {
this.trivialBean = trivialBean;
}
public static void main(String... args) {
ApplicationContext context = new AnnotationConfigApplicationContext(TrivialConfig.class);
Trivial trivial = new Trivial();
trivial.go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}
输出
它起作用了!有关的详细信息,请参阅Spring文档。您应该向stacktrace添加调试级别,以确保Spring正确启动,看起来您添加了正确的注释,但没有启动Spring应用程序上下文可能与Spring Boot中的Look重复,以处理上下文启动和管理。那么实例化Trial的正确方法是什么?在某些时候,我必须显式地实例化某个类,不是吗?如果我没有,那么就没有自动连线属性的类实例存在于右上角,applicationContext等必须实例化一次。但通常情况下,框架代码会这样做。作为应用程序开发人员,我们在服务、控制器等类中编写代码,通常我们不需要直接引用上下文。但是,在实践中,getBean有时非常有用,特别是当我们编写静态实用程序方法时
public class TrivialBean {
public String foo = "TEST TEST TEST";
@Override
public String toString() {
return foo;
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
@Configuration
@EnableSpringConfigured
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@Configurable
public class Trivial {
public TrivialBean trivialBean;
@Autowired
public void setTrivialBean(TrivialBean trivialBean) {
this.trivialBean = trivialBean;
}
public static void main(String... args) {
ApplicationContext context = new AnnotationConfigApplicationContext(TrivialConfig.class);
Trivial trivial = new Trivial();
trivial.go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}
trivialBean: TEST TEST TEST