spring02

一、使用注解代替xml的bean配置

  1、

  (1)类对象的定义配置:

    我们先来看一张图:

  

  在spring01中,我们是使用xml中的:

    <bean  name="user"  class="">  

      <property  name="age"  value="18"></property>

    </bean>

  那么,使用注解之后,对照上图,定义对象:

    用@Component("user")以及他的衍生类:(使用注解时,如果注解里只有一个属性,且是value的话,属性名value可以省略)

    @Controller(web层);

    @Service(业务层);

    @Repository(持久层,dao层);

  比如下列例子,就相当于<bean  name="user"  class=""></bean>的xml配置:

    @Controller("user")

    class  User{

      private  String  name;

    }

  衍生类主要是为了让被标注类本身的用途清晰,这4个注解目前的功能是一致的,spring后续会对衍生类注解的功能进行增强。

  这些配置类都写在Bean包下的类里,如User类;

  (2)修改对象的作用范围(scope属性配置)

    如:在类上加注解:@Scope(scopeName=“prototype”)

  2、属性的注入

  上边介绍了对象的定义这个配置,主要使用4个注解(包含衍生类),注解加在类上,比如User类上:@Controller("user"),user就是用xml配置时的name,class中的name;

  下面,介绍属性的注入,即类对象的依赖属性(字段):比如:

  (1)值类型的注入  

    第一种:直接加在属性上,这种方式是通过反射的Field赋值,但是破坏了封装性的原则(直接在私有属性上加)

      @Value(“张三”)

      private String name;   即给name赋值“张三”

    第二种:加在set方法上,通过set方法赋值,推荐使用

      @Value(“张三”)

      public  void  setName(String  name){

        this.name=name;

      }

  (2)引用类型的注入

    比如:

      @Component("user")

      class  User{

        @Value(“张三”)

        private  String  name;

        @Autowired//自动装配  或者  @Resource(name=“car”)

        private  Car  car;//当然这里这个对象,也要在容器中配置;

      }

    注:@Autowired和@Resource的区别:

    @Autowired 自动装配(没有参数),会根据被标注的引用类型属性(对象)的类型,自动在spring容器中找到符合该类型的对象,并赋值给当前的引用变量,但是只适用于该引用类型的对象只有一个的时候,如果容器中有多个符合该类型(被注解标注的)的对象,那么就需要再加上一个注解:@Qualifier(“car”),组合使用,从而确定到底引用的是哪一个对象;

    @Resource(name="car")手动注入,指定要注入哪个对象

  (3)初始化/销毁方法的注入

    

二、spring与junit整合测试

    

三、结论

    

原文地址:https://www.cnblogs.com/limuma/p/8462702.html