IoC:控制反转:使用对象时,在程序中不要主动使用new产生对象,转换由外部提供。对象的创建控制权由程序转移到外部,这种思想称为控制反转。可以降低耦合度
Spring技术实现了Ioc,Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的外部。
IoC容器负责对象的创建,初始化等一系列操作,被创建或被管理的对象在IoC容器中统称为bean
DI 依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
AOP:面向切面编程
作用:在不惊动原始设计的基础上为其进行功能增强
IoC控制反转
1、将对象放入容器
在applicationContext.xml中定义bean,id为它的标识,class为依赖注入的全路径
2、从容器中取出
获取applicationContext对象
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml 配置文件");
ctx.getBean("配置文件中bean的id")
Spring默认取出的bean是单例的,Spring默认使用无参的构造方法实例化bean
BeanFactory是IoC容器的顶层接口
DI依赖注入
例如容器中service需要dao的注入,在service的bean中增加property标签(构造器注入为constructor-arg 里面的name指构造的形参),里面有name和ref,name指的是在service中定义的dao的名称(private BookDao bookDao),
ref指的是dao所配置bean的id(如果注入的是简单类型,将ref换成value即可,value为简单类型的值)
在service的实现类中setter或者构造器完成注入public void setBookDao(BookDao bookDao) this.bookDao = bookDao
依赖自动装配
在bean中加入autowire="byType"(按类型装配,最常用),需要搭配set方法使用,同时还需要自动装配所需要的bean(按类型,实现类必须唯一)
如果是按名称自动装配需要bean的id和private所定义的名称相同
自动装配不能对简单类型进行操作
AOP
连接点:程序执行中的任意位置。在SpringAOP中,理解为方法的执行
切入点:匹配连接点的式子
在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
一个具体方法:com.heima.dao包下的BookDao接口中无形参无返回值的save方法
匹配多个方法:所有的save方法,所有的get开头方法,所有以Dao结尾的接口的任意方法,所有带一个参数的方法
通知:在切入点处执行的操作,也是共性功能
在SpringAOP中,功能最终以方法的形式呈现
1、定义通知
public void method1(){//该方法是一个通知
System.out.println(System.currentTimeMillis());
}
2、定义无参无返回值的空方法,使用注解标记为一个切入点
@Pointcut("execution(void com.heima.dao.BookDao.update())")//定义一个切入点
private void pt(){}
3、在定义的方法上用注解绑定通知和切入点
@Before("pt()")//绑定通知和切入点
4、在此类中用注解加载,并标记这个一个aop
@Component//告诉spring来加载
@Aspect//告诉spring这是一个做aop的
5、在配置类中开启Spring对AOP注解驱动支持
@EnableAspectJAutoProxy//告诉程序要用注解开发aop
spring事务的作用:在数据层或业务层 保障一系列数据库操作同成功同失败
@Transactional//代表开启事务,一般写在接口上
@EnableTransactionManagement:开启注解式事务驱动