下面为@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>
可以添加
其中type可以指定下面四种过滤器
annotation: 需要指定一个注解名,如下org.springframework.stereotype.Repository,过滤DAO注解
<!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:include-filter>
regex:正则过滤器 ,指定正则表达式
aspextJ:AspextJ过滤器
其中annotaion和assignable最常用
没有指定Bean的Scope默认为singleton
@Scope(“prototype”)
//为Bean实例指定person名
@Component(“person”)
public class Person(){…}
一般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(){...} }
@Depends(depends-on)用于强制初始化其他Bean,@Lazy(lazy-init)用于指定该Bean是否取消预初始化.
@Lazy(true) @DependsOn({'car', 'address'}) @Conponent public class Person{...}
上面代码使用@DependsOn修饰Person类,强制初始化car和address两个Bean,使用@Lazy实现懒初始化。
实现自动装配,标注setter方法,普通方法,Field和构造器,个人倾向显式指定依赖。
@QUALIfier根据Bean标识zhiding自动装配。
Spring提供了注解@Value,用于在程序中获取properties配置文件属性值。例如:
applicationContext.xml中指定配置文件。
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;