Annotation(注解)
标注Spring Bean的Annotation
- @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注解
@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中指定配置文件。
<context:property-placeholder location="classpath:xxx.properties"
ignore-unresolvable="true" />
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;