转载

Spring基于注解的配置

  • @Component:标注一个普通的Spring Bean类
  • @Service:标注一个控制器组件
  • @Controller:标注一个业务逻辑组件类
  • @Repository:标注一个DAO组件类

下面为@Component的注解

package annotation;

import org.springframework.stereotype.Component;

@Component
public class UserObject {

    public void getUser(){
        System.out.println("component  getUser...");
    }
}

其在XML中配置方式很简单,只需加上下面

<context:component-scan base-package="package(包路径)"></context:component-scan>

可以添加 子元素更详细的指定Annotation标注。使用时需要添加type属性和expression.

其中type可以指定下面四种过滤器

  • annotation: 需要指定一个注解名,如下org.springframework.stereotype.Repository,过滤DAO注解

    <!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:include-filter>
  • regex:正则过滤器 ,指定正则表达式

  • assignable:类名过滤器,指定java类
  • aspextJ:AspextJ过滤器

    其中annotaion和assignable最常用

    Bean作用域的注解(annotation)

    没有指定Bean的Scope默认为singleton

    @Scope(“prototype”)

    //为Bean实例指定person名

    @Component(“person”)

    public class Person(){…}

@Resource配置Bean依赖

一般XML的依赖配置:

<bean id="person" class="autowire.Person" p:name="huihui" p:address-ref="address2" ></bean>

注解的依赖配置

@Component
public Class Person{
    private String name;
    private Address address;
    public void setName(String name){
        this.name = name;
    }
    @resource(name="address")
    public void setAddress(Address address){
        this.address = address;
    }
    public void toString(){...}
}

将指定容器中的Bean作为参数传入,一般setter在XML方法是必须的,但是在注解中,@Resource可以修饰Field,可以省略name属性。在使用@Resource修饰Field时,Spring会直接使用java ee的Field注入。可以不使用setter方法。

@Resource修饰setter方法,省略name属性,则name属性是setter方法去掉前面set字串,首字母小写得到的字串。

@PostConstruct,@PreDestroy定制生命周期行为

init-method(@PostConstruct)在Bean依赖关系注入完成后回调该方法,destroy-method(@PreDestroy)在销毁Bean之前回调该方法。

@Component
public class Person{
    private String name;
    private Car car;
    public void setName(String name){
        this.name = name;
    }
    @Resource
    public void setCar(Car car){
        this.car = car
    }
    @PostConstruct
    public void init(){...}
    @PreDestriy
    public void destroy(){...}
    public void toString(){...}
}

@DependsOn,@Lazy

@Depends(depends-on)用于强制初始化其他Bean,@Lazy(lazy-init)用于指定该Bean是否取消预初始化.

@Lazy(true)
@DependsOn({'car', 'address'})
@Conponent
public class Person{...}

上面代码使用@DependsOn修饰Person类,强制初始化car和address两个Bean,使用@Lazy实现懒初始化。

@Autowired

实现自动装配,标注setter方法,普通方法,Field和构造器,个人倾向显式指定依赖。

@QUALIfier根据Bean标识zhiding自动装配。

@Value

Spring提供了注解@Value,用于在程序中获取properties配置文件属性值。例如:

  1. applicationContext.xml中指定配置文件。

    1. Spring bean中使用@Value注解获取指定参数。

      // xxx.properties配置项:

      // server.ip=192.168.1.1

      // server.port=8080

      @Value(“${server.ip}”)

      private String ip;

      @Value(“${server.port}”)

      private int port;

原文  http://huihui.kim/2017/10/19/Spring基于注解的配置/
正文到此结束
Loading...