spring三层架构基于注解的自动装配
- @Component :把类标记为普通组件及bean;
- @Controller:标记为控制层组件
- @Service:标记为业务层组件;
- @Repository:标记为持久层组件
@Controller,@Service,@Repository本质都是一样的相当于@Component,取了三个新名字,只是为了程序看,方便理解.
1.扫描
表是告诉ioc哪些包下的类,使用了注解需要ioc管理
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<context:component-scan base-package="com.xunjun.spring"></context:component-scan>
</beans>
2.排除扫描
1、排除指定注解的类-annotation
通过xml配置,可以将配置了@Service注解的类都排除掉
<context:component-scan base-package="com.coderp">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
2、排查指定切面的类-aspectj
采用aspectj过滤,“com.coderp.service.impl…*”:表示下面的包及其子包(包切入点)
<context:component-scan base-package="com.coderp" >
<context:exclude-filter type="aspectj" expression="com.coderp.service.impl..*"/>
</context:component-scan>
采用aspectj过滤,"*…Log":com.coderp所有的包及其子包下,只要有Log类,就会被排除
<context:component-scan base-package="com.coderp" >
<context:exclude-filter type="aspectj" expression="*..Log"/>
</context:component-scan>
3、排除继承至某接口或类的类-assignable
通过xml配置,将Log类或继承Log的类都排除掉
<context:component-scan base-package="com.coderp">
<context:exclude-filter type="assignable" expression="com.coderp.service.impl.Log"/>
</context:component-scan>
4、排除符合指定匹配规则的类-regex
通过xml配置,将符合正则表达式模式的类进行排除
<context:component-scan base-package="com.coderp">
<context:exclude-filter type="regex" expression="com.coderp.service.impl.PayServiceImpl"/>
</context:component-scan>
5、叠加进行排除
通过xml配置,可以对多种过滤方式进行组合,如下组合assignable和aspectj方式
<context:component-scan base-package="com.coderp">
<context:exclude-filter type="assignable" expression="com.coderp.service.impl.Log"/>
<context:exclude-filter type="aspectj" expression="com.coderp.aspect..*"/>
</context:component-scan>
3.包含扫描
默认整个包全部扫描 要想使用包含扫描,关闭默认选项配置属性 <context:component-scan base-package="com.xunjun.spring" use-default-filters="false"> <context:include-filter type="" expression=""/> </context:component-scan>
4.注解加扫描生成的bean的 id
• 默认是类型对应的小驼峰 • 自定义则是给注解传参 例如@Controller("id")
5.自动装配
给要装配的引用类型加上@Autowired;这时候对应的类的成员变量不需要getter,setter方法
1. 标注的位置:
• 引用类型的成员变量上 • 成员变量对应的set方法上 • 有参构造上
2. 原理
• 默认是使用byType匹配,当匹配到多个类型的时候,会自动转化为byName,将属性名作为id匹配 • 有如果匹配了多个类型,根据名字,一个没匹配上,这时候要在这个属性上要用注解@Qualifier(“id”)指定一个id去匹配赋值,否则异常 • 一个类型都匹配不上,则会报错,有别于xml的方式,除非@Autowired(require=false)则和xml方式一样,有则装配,没有则用默认值.
@Controller
public class UserController {
@Autowired
UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public void saveUser(){
userService.saveUser();
}
}
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void saveUser() {
System.out.println("保存成功");
}
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void saveUser() {
userDao.saveUser();
}
}
目录
作者:徐徐版权声明:转载请注明文章出处

~~空空如也