Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带自动连线的Spring纯注释_Spring_Spring Annotations - Fatal编程技术网

带自动连线的Spring纯注释

带自动连线的Spring纯注释,spring,spring-annotations,Spring,Spring Annotations,我正在尝试对Spring进行完整的注释(无xml)实现。未填充自动连线成员。根据我的研究,有三件事要做: 设置一个管理bean的配置文件 使用@Autowired将bean获取到文件中 实例化一个应用程序上下文以获得进展 很难找到一个只使用注释的完整示例,因此我没有太多参考。大多数示例至少使用一些xml 没有错误消息,所以我不知道问题出在哪里。该值仅为null。这是我的档案: Trial.java public class Trivial { public TrivialBean

我正在尝试对Spring进行完整的注释(无xml)实现。未填充自动连线成员。根据我的研究,有三件事要做:

  • 设置一个管理bean的配置文件

  • 使用
    @Autowired
    将bean获取到文件中

  • 实例化一个应用程序上下文以获得进展

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

没有错误消息,所以我不知道问题出在哪里。该值仅为null。这是我的档案:

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);
    }
}
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
    配置为bean
  • new 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