基于注解配置
Spring容器成功启动的三大要件
- Bean定义信息
- Bean实现类
- Spring本身
@Component("userDao")
public class UserDao{
}
等效于
<bean id="userDao" class="com.smart.UserDao">
- @Commonent
- @Repository//dao
- @Service//service
- @Controller//controller
<?xml vsersion="1.0" encoding="UTF-8"?>
<!--context命名空间,通过扫描类包以应用注解定义bean-->
<benas xmlns="http://www.springframework.org/schema/benas"
xmlns:xsi="http://www.w2.org/2001/XMLScheam-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLoaction="http://www.springframework.org/schema/benas
http://www.springframework.org/schema/benas/spring-benas-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="com.smart.anno"/>
</beans>
<!--resource-pattern属性过滤出特定的类,默认**/*.class-->
<context:component-scan base-package="com.smart" resource-pattern="anno/*.class"/>
<context:component-scan base-package="com.smart">
<!--包含目标类,可拥有若干include-filter-->
<context:include-filter type="regex" expression="com\.smart\.anno.*"/>
<!--排除目标类,可拥有若干exclude-filter-->
<context:exclude-filter type="aspectj" expression="com.smart..*Controller+"/>
</context:component-scan>
include-filter/exclude-filter支持多类型过滤表达式
类别 示例
annotation com.smart.XxxAnnotation//所有标注了XxxAnnotation的类
assignable com.smart.XxxService//所有继承或扩展XxxService的类
aspectj com.smart..*Service+//所有类名以Service结束的类及继承或扩展的类
regex com.smart.anno..*//所有anno类包下的类
custom com.smart.XxxTypeFilter//实现TypeFilter接口,采用XxxTypeFile过滤规则
自动装配bean
//@Service标注bean
@Service
public class LogonService{
//按默认类型匹配的方式,在容器中查找匹配bean
@Autowired
private LogDao logDao;
@Autowired
private UserDao userDao;
}
@Autowired的required属性
@Service
public class LogonService{
//如果没有匹配的bean,spring启动时将报错
//required=false标注,不抛出异常,默认为true
@Autowired(required=false)
private LogDao logDao;
@Autowired
private UserDao userDao;
}
@Qualifier
@Service
public class LogonService{
@Autowired
private LogDao logDao;
//Qualifier指定注入bean名称
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
对方法进行标注
@Service
public class LogonService{
private LogDao logDao;
private UserDao userDao;
@Autowired
public void setLogDao(LogDao logDao){
this.logDao logDao;
}
@Autowired
@Qualifier("userDao")
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
@Autowired
public void init(@Qualifier("userDao")UserDao userDao,LogDao logDao){
this.userDao = userDao;
this.logDao = logDao;
}
对集合进行标注
@Component
public class MyComponent{
//spring会将容器内所有类型为plugin的bean注入
@Autowired(required = false)
private List<Plugin> plugins;
public List<Plugin> getPligins(){
return plugins;
}
}