美文网首页SpringBoot云课堂
Spring的两种配置方式——基于注解配置和基于JAVA配置

Spring的两种配置方式——基于注解配置和基于JAVA配置

作者: Tommmmm | 来源:发表于2018-02-12 15:24 被阅读48次

    Spring的两种配置方式

    1、基于注解的配置

    配置类DoConfig

    @Configuration
    @ComponentScan("com.example")
    public class DoAnnoConfig {
    
    }
    

    测试代码

       @Test
        public void test() {
            AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(DoAnnoConfig.class);
            LowerAction lowerAction=ctx.getBean(LowerAction.class);
            lowerAction.execute("Rod Johnson");
        }
    
    测试结果 测试结果

    实验中想到的问题1:@ComponentScan的作用是什么?
    @ComponentScan扫描包名下的所有类,把有注解声明的类加载到Spring容器中。
    packages下用注解标识的类,由spring自动扫描并且装入bean容器。

    实验中想到的问题2:既然@ComponentScan可以扫描包下的类并装入Bean容器,那么配置类上一定需要@Configuration注解吗?
    @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法。
    Spring提供了一个AnnotationConfigApplicanContext类,能够直接通过标注@Configuration的Java类启动Spring容器。

    测试代码

        @Test
        public void test1(){
            AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(DoAnnoConfig.class);
        }
    

    测试结果

    测试结果
    由实验结果可见,Spring容器已启动。@Configuration作用为配置spring容器。因此必不可缺。

    2、基于JAVA的配置

    配置类DoJavaConfig

    @Configuration
    public class DoJavaConfig {
        @Bean(name = "UpperAction")
        public UpperAction upperAction(){
            return  new UpperAction();
        }
    }
    

    测试代码

      @Test
        public void test() {
            AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(DoJavaConfig.class);
            UpperAction upperAction=ctx.getBean(UpperAction.class);
            upperAction.execute("hahahaha");
        }
    

    想到的问题1
    @Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的<bean>。作用为注册bean对象。
    既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service等注解注册bean,那么就需要配置@ComponentScan注解进行自动扫描。
    那么基于JAVA的配置与基于注解的配置有什么区别呢?

    图1
    图2
    图3

    实验中碰到的问题1:直接使用@Autowired注解修饰“Action”来注入Action,Spring容器报错

    报错
    由于有多个类实现了Action接口,所以Spring不知道应该绑定哪个实现类,所以抛出了如上错误。
    解决方法:
    解决方法
    使用Qualifier注解
    实验中碰到的问题1:使用@Service注解修饰LowerAction和UpperAction,对于基于“Java配置”的方式是否是必须的?
    不是必须的。@Service可以将一个类定义成一个bean,实例化并放入容器。而配置类中的@Bean把实例化的对象转化成一个Bean,放在IoC容器中。

    3、结合前一章的两种注入方法输出hello

    在之前的实验中
    测试代码形式如下:

       @Test
        public void test() {
            AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(DoAnnoConfig.class);
            LowerAction lowerAction=ctx.getBean(LowerAction.class);
            lowerAction.execute("Rod Johnson");
        }
    
    因为LowerAction的成员message均没有值,测试结果均如下: 测试结果

    因此可以通过以下方法输出hello

    通过@Value注解 构造方法注入 Setter()注入

    4、本章小结

    Spring容器启动有三要素:Bean的定义,Bean的实现,Spring容器。
    在基于XML的bean属性配置中,bean的定义信息与bean的实现类是分离的。

    相关文章

      网友评论

        本文标题:Spring的两种配置方式——基于注解配置和基于JAVA配置

        本文链接:https://www.haomeiwen.com/subject/ayortftx.html