一.Spring的介绍
1.什么是Spring?
Spring是轻量级的javaEE应用开源框架
2.Spring的好处
ioc aop 粘合剂
二.IOC
1.耦合
耦合是什么? 对象之间的依赖关系(service依赖dao层),耦合度越高维护成本越大
2.IOC
IOC(Inverse of Control) 控制反转:正传是自己new对象,反转是有工厂创建对象
3.工厂模式下的IOC解耦合
1.把service和dao配置到beans.properties
2.读取beans.properties
3.通过反射创建对象,并装到容器中
4.使用时,直接从容器中获取
工厂:①通过反射创建对象,②把对象装容器
4.Spring的IOC解耦合
1.pom.xml spring-context
2.applicationContext.xml
<bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
<bean id="userService" class="com.by.service.UserServiceImpl"></bean>
5.DI
1.DI是什么?
DI(Dependency Injection) 依赖注入:把依赖对象(userDao)从容器中(map)拿出来赋值给调用者(UserService)
2.DI
①构造方法注入
a.提供构造方法注入
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
b.注入
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
②.set方法注入
a.提供set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
b.注入
<property name="userDao" ref="userDao"></property>
③.自动注入
a.提供set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
b.注入
<bean id="" class="" autowire="byType"/>
6.BeanFactory和ApplicationContext区别
BeanFactory :顶级接口 getBean时才创建对象
AppliactionContext:子接口 上来就创建对象
7.spring bean的作用域范围(bean放哪了)
singleton:单例,IOC容器
prototype:多例,每次都创建
request:request域
response:Respons域
application:ServiceContext域
单例和多例的使用场景?
单例:service、dao、SqlSessionFactory
多例:Connection、SqlSession
8.spring bean的生命周期
单例:[创建容器]---->构造方法(实例化)--->set方法注入---->init方法(初始化)--->[容器关闭]--->destroy方法(销毁bean)
多例:[getBean]--->构造方法(实例化)-->set方法注入---> init方法(初始化)-->[JVM垃圾回收]-->destroy方法(销毁bean)
三.spring基于注解的IOC
1.常用注解
①.IOC注解
@Controller:web层
@Service:service层
@Repository:dao层
@Component:三层架构之外
②.DI注解
@Resource(name=""):按名称注入,按map的key值获取对象
@autowired:按类型注入
@Value:注入基本类型
2.配置步骤
①.applicationContext.xml
<context:component-scan base-package="com.by"/>
②.IOC
@Repository
public class UserDaoImpl implements UserDao{
}
@Service
public class UserServiceImpl implements UserService{
}
③.DI
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
}
四.spring的AOP
1.为什么要使用AOP?
2.什么事AOP
AOP(Aspect Oriented Programming)面向切面编程:把程序中重复的代码抽取出来,使用动态代理技术来执行
3.代理模式
4.aop的核心概念
切点(pointcut):要增强的方法,eg:add() update()
增强/通知(advice):要搞得事情,eg:日志,控制事务
前置通知:aop:before
后置通知:aop:after-returning
最终通知:aop:after
异常通知:aop:after-throwing
环绕通知:aop:arount