1.在使用对象时,在程序中不要主动使用new产生对象,转为外部提供对象
2.创建控制权转移到外部,这种思想--IOC控制反转
spring 提供容器,IOC容器,用来充当IOC思想的外部
IOC容器负责对象创建,初始化,这些对象叫bean
3.DI依赖注入
在容器中建立bean 与bean之间依赖关系的过程
最终效果:
使用对象时不仅可以直接从IOC中获取,并且获取到bean已经绑定了的所有依赖关系
IOC入门案例:
1.先导入spring坐标,导入一个包,才能新建xml文件
2.定义spring 管理的类(接口)
3.创建s理的bepring配置文件的类,配置对应类作为spring管an
4.初始化IOC容器
5.获取资源
DI入门案例:
1.IOC容器管着bean
2.service中使用new形式创建的Dao对象是否保留
3.service中需要的Dao对象怎么进service
4.service与dao之间的关系如何描述
1.删除业务层中service(java文件)中的new的方式创建的dao对象
2.提供依赖对象对应的setter方法
3.在xml中配置service与dao之间的关系
property标签表示配置当前bean的属性 ref属性表示参考哪一个bean 同文件的
Bean别名
1.可以定义多个,用‘,’分割
2.报错:nosuchdefinitionexception无法获取bean
3.默认是单例,可以重复使用 适合:表现层/业务层/数据层/工具对象 不适合 封装实体
实例化bean
无参方法不存在,将抛出异常BeanCreationException
依赖注入
setter注入--引用类型
构造器注入
依赖自动装配
IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
不能装配简单类,只能对引用类型
推荐按类型装配 byType
加载properties文件
1.xml文件中开启命名空间,复制一份出来bean改contex
2.使用context命名空间,加载指定的propertieswenjian
3.使用${}读取加载的属性值
4:system-properties-mode="NEVER" 就不会和系统冲突,系统优先级更高
按照bean类型获取bean只能对应一个,否则会报错
注解开发
1.在service层的java文件使用@Compoent定义bean
1:@Component
代替Spring-application.xml核心配置文件中的<bean>标签中的类
2.在核心配置文件中通过组件扫描加载bean
@Controller、@Service、@Repository是@Component的衍生注解
@Contorller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义
纯注解开发
Spring3.0开启了纯注解开发模式,使用java类代替配置文件,开启了Spring快速开发赛道
1.自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供 2.setter方法自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
使用@Value可以进行简单类型注入
加载properties文件可以用
@PropertySource注解
@Configuration @ComponentScan("com.itheima") @PropertySource({"jdbc.properties"})
第三方bean管理
1.@Bean
2.第三方bean依赖注入
1.引用类型:方法形参
2.简单类型:成员变量
XML配置与比对注释配置
Spring整合MyBatis
mybatis管理sqlsessionfactory
Spring整合MyBatis
Spring整合JUnit
domain层是干嘛的
AOP
面向切面编程
在不惊动原始设计的基础上为其进行功能增强
spring理念:无侵入式
连接点:所有方法
切入点:哪些方法需要追加功能的,匹配通知的方法,叫切入点
通知:各个方法共用的功能,叫通知。通知存在于通知类中。
切面:切面描述的是通知共用的功能与所对应切入点的关系。在哪些切入点上执行哪些通知叫切面
spring入门案例
AOP编程思想
AOP工作流程
AOP核心概念
1.目标对象(Target )∶原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
2.代理(Proxy )︰目标对象无法直接完成工作,需要对其进行功能回填
,通过原始对象的代理对象实现
AOP切入点表达式
AOP通知类型
写一个通知类的步骤
1: @Component
2: @Aspect
定义的一个通知类
3: @Ponitcut("execution(返回值类型 包.方法(参数))")
定义的通知空方法
4:@Around("类名.通知空方法()")
定义加强的通知方法
public Object runSpeed(ProceedingJoinPoint pjp){
Objection ret = pjp.proceed();
return ret;
}
案例-业务层接口执行效率
为了获得当前执行谁,需要
//获取执行的签名对象 Signature signature = pjp.getSignature();String className=sighnture.getDeclaringTypeName();
AOP通知获取数据
获取参数,获取返回值,获取异常
Spring事务简介
Spring开启事务,使用注解版本,需要三步
1:定义的service接口的方法,添加@Transactional注解
2:在jdbcConfig.java配置类中,设置事务管理器 DataSourseTransactionManager
3:在SpringConfig.java中,开启注解式事务驱动。@EnableTransactionManagement