zoukankan      html  css  js  c++  java
  • 小庆的Spring学习笔记二

    Spring基于注解的装配

    一.spring基于注解配置bean

    正常情况下我们在xml配置bean,但是我们为了减少xml配置,可以在类上使用一些特定注解向Spring容器表明这是一个需要注册的bean。常用的注解有@Configure、@Component、@Reposity、@Service、@Controller。

     传统的在xml中装配bean的方式 
    <bean id="baishi" class="com.yqg.springannotation.BaiShi"></bean>
    <bean id="kekou" class="com.yqg.springannotation.KeKou"></bean> <bean id="work" class="com.yqg.springannotation.Work"></bean>
    使用包扫描,基于注解注册bean的方式,包含子包,注册的bean名称为类名首字母小写,如Student类,注册的名称为student
    <context:component-scan base-package="com.yqg.springannotation"></context:component-scan>

      

    二、使用注解注入依赖的bean

    我们使用@Autowried、@resource这两个注解将bean注入,使用注解的好处是不用在配置文件中使用ref注入bean,不用在需要注入bean的类中使用get和set,代码简洁。但是有些类比如整合第三方类,我们不得不使用xml配置bean。

    代码示例

    xml部分配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="baishi" class="com.yqg.springannotation.BaiShi"></bean>
        <bean id="kekou" class="com.yqg.springannotation.KeKou"></bean>
        <bean id="work" class="com.yqg.springannotation.Work"></bean>
    </beans>
    

    一个接口以及两个实现类

    package com.yqg.springannotation;
    
    /**
     * @author yqg
     * @date 2019-02-15 21:31
     */
    
    public interface Drink {
        /**
         * 测试Spring注解
         */
    
        public void say();
    }
    

      

    package com.yqg.springannotation;
    
    /**
     * @author yqg
     * @date 2019-02-15 21:32
     */
    public class BaiShi implements Drink{
    
        public void say() {
            System.out.println("百事可乐");
        }
    }
    

      

    package com.yqg.springannotation;
    
    /**
     * @author yqg
     * @date 2019-02-15 21:33
     */
    public class KeKou implements Drink{
    
        public void say() {
            System.out.println("可口可乐");
        }
    }
    

    使用注解注入依赖的类Work

    package com.yqg.springannotation;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    
    import javax.annotation.Resource;
    
    /**
     * @author yqg
     * @date 2019-02-15 21:44
     */
    public class Work {
    
        public void work(){
            baiShi.say();
            keKou.say();
        }
    
    //    public void work(){
    //        drink.say();
    //    }
        @Autowired(required = false)
        /**
         * 百事可乐
         */
        private BaiShi baiShi;
        @Resource(name = "kekou")
        private KeKou keKou;
    //    @Autowired
    //    @Qualifier(value = "baishi")
    //    private Drink drink;
    }
    

      测试类

    package com.yqg.springannotation;
    
    import com.yqg.util.ApplicationContextUtil;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    
    /**
     * @author yqg
     * @date 2019-02-15 21:38
     */
    public class AnnotationTest {
        @Test
        public void test(){
            ApplicationContext applicationContext =  ApplicationContextUtil.getApplicationContext();
            Work work = applicationContext.getBean("work",Work.class);
            work.work();
        }
    
    }
    

      

    @Resource和@AutoWried两者作用一样,但是两者也有差别

    1.@Resource默认按照byName注册bean,如果没有就按类型,可以@Resource(name="")指定bean的名称,@Autowired默认按类型注入

    2.@Resource是javaEE的注解,@Autowried是spring的注解,尽量使用@Resource,减少第三方代码耦合

    @qualifier注解是解决是实现类不确定问题,比如一个接口多个实现类,我们将该接口注入,那么spring容器不能确定使用哪个实现类,我们可以使用@qualifier和@Autowried结合使用。

  • 相关阅读:
    在C#中生成唯一的字符串和数字
    c:\Windows\System32\drivers\etc\hosts 这是什么
    ado.net 分布式事务处理示例,及微软官方示例
    常逛网站五星推荐
    结构化程序设计方法 windrainpy
    responsive响应式布局 windrainpy
    DOM Core和HTML DOM的区别 windrainpy
    自定义addLoadEvent函数为body.onload事件绑定多个函数 windrainpy
    壮大我的sublime Text 2 windrainpy
    server服务器知识和CS、BS架构 windrainpy
  • 原文地址:https://www.cnblogs.com/yanqingguo/p/10386305.html
Copyright © 2011-2022 走看看