spring基本知识点
2021-04-16 15:37:44 32 举报
AI智能生成
spring知识点轮廓
作者其他创作
大纲/内容
概念:企业级开源轻量级框架
组成容器:IOC(控制反转,也叫DI依赖注入),AOP(面向切面编程)
IOC/DI-bean配置
基本方式
属性注入
<bean id="test" class="com.test.beans.TestObj">
<property name="name" value="test123"></property>
</bean>
<property name="name" value="test123"></property>
</bean>
ref
引用其他bean
构造方法注入
<bean id="test1" class="com.test.beans.TestObj">
<constructor-arg value="test1"></constructor-arg>
</bean>
index
type
也可使用value子节点方式
<bean id="test" class="com.test.beans.TestObj">
<property name="name">
<value>test1</value>
</property>
</bean>
也可使用map,list等集合属性,或者properties,可以使用util独立bean,以供多处使用,在bean标签里使用p命名空间可以直接赋值p:name=""
引用方式
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
TestObj testObj = (TestObj)ctx.getBean("test");
testObj.test();
TestObj testObj = (TestObj)ctx.getBean("test");
testObj.test();
自动装配(用得少)
autowire(根据属性名和类型自动装配)
byName
byType
不灵活
继承关系
同样的bean属性可以做继承
在子bean中使用parent=""指定父bean
子bean可以覆盖父属性
设置bean的属性abstract="true" 就不可以被实例化,只能用来其它bean继承
指定必须的依赖关系depends-on=""
作用域
scope=""
singleton(默认)
单例模式,创建容器new ClassPathXmlApplicationContext()的时候只创建一次,实例化的时候一直用一个
prototype
原形的,创建容器的时候不创建bean的实例,每次实例化的时候都创建bean
使用外部属性文件
proterties
引入content
spEL
概念:用于bean标签内引用其他变量或者常量,表达式等
语法:#{}
#{'name'},#{'person.name'},#{person.age>18?'成人':'未成年'}
生命周期
创建bean实例
bean设置属性值和其它bean的引用
将bean传给前置处理器,执行实现postProcessBeforeInitialization
init-method=""
初始化方法
将bean传给后置处理器,执行实现postProcessAfterInitialization
使用bean
destroy-method=""
销毁方法
后置处理器
概念:在bean执行的前后对属性额外的处理
实现 BeanPostProcessor 接口
实现postProcessBeforeInitialization
实现postProcessAfterInitialization
配置方式<bean class="com.test.beans.houzhichuliqi"></bean>不需要配置id 容器会自动识别
如需指定bean,可以使用beanname判断
工厂方法配置bean
静态工厂方法(静态代码块设置)
bean的class属性指向静态方法的类名
factory-method指向方法名
constructor-arg传递参数
实例工厂方法(构造器设置)
与静态工厂方法一致,只不过需要先创建实例
factoryBean方式配置
实现factoryBean接口
注解方式配置bean
spring会自动扫码有特定注解的组件
@component组件
标识一个受spring管理的组件
@responsity组件
标识持久层组件
@service
标识业务层组件
@controller
标识控制层组件
配置包
在xml中使用component-scan指定包目录
resource-pattern指定特定的类
include-filter
exclude-filter
bean与bean之间的相互调用
@autowired/@resource/@inject
自动装配
构造器
方法
属性
required='false'设置无需装配
@Qualifier("")指定bean的名称
泛型依赖注入
AOP
注解
原理:proxy动态代理
@aspect
@before()前置通知/@after()后置通知/@afterReturning()返回通知
@around()环绕通知
joinPoint
在方法中加入参数joinpoint可以获取方法访问的参数和方法名等
AspectJ表达式
指定切面的切入点位置
@order(1)优先级
@Pointcut
用于相同的切面位置,统一一个方法,其它地方调用方法名即可@Around("logPointcut()")
xml
<aop:config>
<aop:pointcut expression="" id=""></aop:pointcut>
<aop:aspect ref="">
<aop:around method=""></aop:around>
</aop:aspect>
</aop:config>
<aop:pointcut expression="" id=""></aop:pointcut>
<aop:aspect ref="">
<aop:around method=""></aop:around>
</aop:aspect>
</aop:config>
事务
保证数据的一致性和完整性
注解
@Transactional
传播行为(当前的事务方法被其它事务方法调用时,事务如何使用)
@Transactional(propagation = Propagation.REQUIRED)(默认的)
统一用一个事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
每个方法使用自己的事务
隔离级别
@Transactional(isolation = Isolation.READ_COMMITTED)
@Transactional(isolation = Isolation.READ_COMMITTED,noRollbackFor = {NullPointerException.class})
指定不回滚的异常
@Transactional(isolation = Isolation.READ_COMMITTED, timeout = 3)
设置事务超时时间,超过时间则程序强行回滚
xml
配置事务管理器
<bean id="test" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<property name="dataSource" ref="dataSource"></property>
</bean>
配置事务属性
配置事务切入点
0 条评论
下一页