我正在尝试执行Spring的完整注释(没有xml)实现。无人居住的成员没有人居住。根据我的研究,有三件事要做:
@Autowired将bean发送到文件很难找到一个只使用注释的完整示例,因此我没有什么可参考的。大多数示例至少使用了一些xml。
没有错误信息,所以我不知道问题出在哪里。这个值只是null。这是我的档案:
Trivial.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);
}
}TrivialBean.java
public class TrivialBean {
public String foo = "TEST TEST TEST";
@Override
public String toString() {
return foo;
}
}TrivialConfig.java
@Configuration
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
}我希望它能输出trivialBean: TEST TEST TEST,但只是输出trivialBean: null
发布于 2015-08-07 08:54:32
基于注释的容器配置中的规则自动装配
为了使自动装配工作,Trivial实例的生命周期必须由Spring容器管理。
示例
TrivialBean.java是相同的
public class TrivialBean {
public String foo = "TEST TEST TEST";
@Override
public String toString() {
return foo;
}
}TrivialConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TrivialConfig {
@Bean
public TrivialBean trivialBean() {
return new TrivialBean();
}
@Bean
public Trivial trivial() {
return new Trivial();
}
}Trivial.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
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 = context.getBean(Trivial.class);
trivial.go();
}
private void go() {
System.out.println("trivialBean: " + trivialBean);
}
}输出
trivialBean: TEST TEST TEST有关基于注释的容器配置的更多信息,请参阅Spring文档。
AspectJ编译时编织和@Configurable
可以将TrivialBean实例自动转换为由new创建的Trivial实例。
spring-aspects.jar包含一个注释驱动的方面,它允许对在容器控制之外创建的对象进行依赖注入。但是,它不应该用于新的基于Spring的项目中。它用于遗留项目,因为某些原因,有些实例是在Spring容器之外创建的。
Spring4.2.0(目前最新的)、 1.8.6 (目前最新的)、Maven和Java1.8.的AspectJ示例
对spring-aspects和aspectjrt的附加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>通过AspectJ Maven插件进行编译时编织
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<encoding>UTF-8</encoding>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<Xlint>warning</Xlint>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>TrivialBean.java是相同的
public class TrivialBean {
public String foo = "TEST TEST TEST";
@Override
public String toString() {
return foo;
}
}TrivialConfig.java
@EnableSpringConfigured类似于<context:spring-configured>。它指示当前应用程序上下文将依赖项注入应用于在Spring工厂之外实例化的类。
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();
}
}Trivial.java
@Configurable将Spring驱动的配置应用于Trivial。
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它起作用了!有关AspectJ与@Configurable的更多信息,请参阅Spring文档。
发布于 2015-08-07 06:51:40
要使@Autowired正常工作,需要在Spring之前实例化Trivial。new Trivial()不起作用。为了使您的样本工作,我认为您需要以下几点:
Trivial配置为bean。new Trivial()更改为context.getBean(Trivial.class)。但是,请注意,在正常情况下使用context.getBean被认为是不好的做法。
https://stackoverflow.com/questions/31870936
复制相似问题