ioc
依赖注入(控制反转)
依赖:
需要的东西
注入:
放进去
业务层对象一般需要数据访问层对象
以前的做法:
class UserServiceImpl{
private UserDao userDao = new UserDaoImpl();
}
以上的做法中,在UserServiceImpl中写死了UserDao的实现类,
如果以后实现类发生变化了,就需要修改源码才能正常使用
在使用spring的时候
class UserServiceImpl{
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.UserDao = userDao;
}
}
在UserServiceImpl中需要UserDao的对象的时候,并没有写死实现类,
而是下使用UserServiceImpl对象之前,放一个UserDao对象进去
(通过setter方法把UserDao类型对象设置进去);
因为没有写死需要的UserDao的实现类,可以很灵活的替换UserDao的实现类对象
spring负责帮我们创建UserServiceImpl对象,负责创建UserDao的实现类的对象,
并且把UserDao的实现类的对象通过setUserDao方法注入到UserServiceImpl对象中
aop
面向切面编程
1 把通用的功能提取出来,放在一个单独的类中
LogUtil
2 在spring的配置文件中配置:
创建LogUtil对象,对象id为logUtil
<aop:config>
<aop:pointcut id="表达式id" expression="哪些类的哪些方法前面要调用的表达式" />
<aop:aspect ref="logUtil">
<aop:before method="要在方法执行之前调用的方法名"
pointcut-ref="引用一个描述在哪些类的哪些方法前面要调用的表达式的id" />
</aop:aspect>
</aop:config>
3 添加aop相关的jar包