spring基本知识点
2021-04-16 15:37:44 32 举报
AI智能生成
spring知识点轮廓
作者其他创作
大纲/内容
spring
概念:企业级开源轻量级框架
组成容器:IOC(控制反转,也叫DI依赖注入),AOP(面向切面编程)
IOC/DI-bean配置
基本方式
属性注入
<bean id=\"test\" class=\"com.test.beans.TestObj\"> <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();
自动装配(用得少)
autowire(根据属性名和类型自动装配)
byName
byType
不灵活
继承关系
同样的bean属性可以做继承
在子bean中使用parent=\"\"指定父bean
子bean可以覆盖父属性
设置bean的属性abstract=\"true\" 就不可以被实例化,只能用来其它bean继承
指定必须的依赖关系depends-on=\"\"
作用域
scope=\"\"
singleton(默认)
单例模式,创建容器new ClassPathXmlApplicationContext()的时候只创建一次,实例化的时候一直用一个
prototype
原形的,创建容器的时候不创建bean的实例,每次实例化的时候都创建bean
使用外部属性文件
proterties
引入content
spEL
语法:#{}
#{'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>
事务
保证数据的一致性和完整性
@Transactional
传播行为(当前的事务方法被其它事务方法调用时,事务如何使用)
@Transactional(propagation = Propagation.REQUIRED)(默认的)
统一用一个事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
每个方法使用自己的事务
隔离级别
@Transactional(isolation = Isolation.READ_COMMITTED)
指定不回滚的异常
设置事务超时时间,超过时间则程序强行回滚
配置事务管理器
<bean id=\"test\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\"> <property name=\"dataSource\" ref=\"dataSource\"></property> </bean>
配置事务属性
配置事务切入点
0 条评论
回复 删除
下一页