首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春纯注解

春纯注解
EN

Stack Overflow用户
提问于 2015-08-07 06:18:32
回答 2查看 1.9K关注 0票数 2

我正在尝试执行Spring的完整注释(没有xml)实现。无人居住的成员没有人居住。根据我的研究,有三件事要做:

  • 设置一个管理bean的配置文件
  • 使用@Autowired将bean发送到文件
  • 实例化应用程序上下文以使球滚动

很难找到一个只使用注释的完整示例,因此我没有什么可参考的。大多数示例至少使用了一些xml。

没有错误信息,所以我不知道问题出在哪里。这个值只是null。这是我的档案:

Trivial.java

代码语言:javascript
复制
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

代码语言:javascript
复制
public class TrivialBean {

    public String foo = "TEST TEST TEST";

    @Override
    public String toString() {
        return foo;
    }
}

TrivialConfig.java

代码语言:javascript
复制
@Configuration
public class TrivialConfig {

    @Bean
    public TrivialBean trivialBean() {
        return new TrivialBean();
    }
}

我希望它能输出trivialBean: TEST TEST TEST,但只是输出trivialBean: null

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 08:54:32

基于注释的容器配置中的规则自动装配

为了使自动装配工作,Trivial实例的生命周期必须由Spring容器管理。

示例

TrivialBean.java是相同的

代码语言:javascript
复制
public class TrivialBean {

    public String foo = "TEST TEST TEST";

    @Override
    public String toString() {
        return foo;
    }
}

TrivialConfig.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
    }
}

输出

代码语言:javascript
复制
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-aspectsaspectjrt的附加依赖

代码语言:javascript
复制
   <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插件进行编译时编织

代码语言:javascript
复制
<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是相同的

代码语言:javascript
复制
public class TrivialBean {

    public String foo = "TEST TEST TEST";

    @Override
    public String toString() {
        return foo;
    }
}

TrivialConfig.java

@EnableSpringConfigured类似于<context:spring-configured>。它指示当前应用程序上下文将依赖项注入应用于在Spring工厂之外实例化的类。

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
    }
}

输出

代码语言:javascript
复制
trivialBean: TEST TEST TEST

它起作用了!有关AspectJ与@Configurable的更多信息,请参阅Spring文档。

票数 1
EN

Stack Overflow用户

发布于 2015-08-07 06:51:40

要使@Autowired正常工作,需要在Spring之前实例化Trivialnew Trivial()不起作用。为了使您的样本工作,我认为您需要以下几点:

  1. Trivial配置为bean。
  2. new Trivial()更改为context.getBean(Trivial.class)

但是,请注意,在正常情况下使用context.getBean被认为是不好的做法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31870936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档