文章目录
Spring
spring主要模块
spring-core:核心模块,主要提供ioc依赖注入功能。
spring-aspects:与AspectJ的集成提供支持。
spring-aop:提供了面向切面编程的实现。
spring-jdbc:数据库连接。
spring-jms:消息服务。
spring-orm:用于支持mybatis等orm框架。
spring-web:为创建web应用程序提供支持。
spring-test:提供junit和testNG测试的支持。
spring-mvc
@Controller + @ResponseBody = @RestController 4.0版本后新加的注解 restful风格 web服务
IOC
控制反转,是一种设计思想,手动创建对象的控制权,交给spring框架管理。IOC容器实际上是一个MAP。
AOP
面向切面编程,将那些与业务无关,业务模块共同调用的逻辑或责任(事务,日志,权限等)封装起来,减少重复代码,降低耦合度,方便扩展与维护。
springAOP基于动态代理,如果要代理的对象,实现了某个接口,springAOP会使用JDKproxy实现代理对象。
如果要代理的对象没有实现接口,springAOP会使用cglib生成一个被代理对象的子类作为代理。
spring aop 与AspectJ aop区别
springaop属于运行时增强(基于代理),AspectJ是编译时增强(基于字节码)。
spring中bean的作用域
singleton,prototype,request,session,global-session
spring声明类注解
@service
@component
@controller
@Repository
spring中bean的生命周期
实例化bean
注入属性
Aware相关接口依赖
BeanPostProcessor接口before方法
是否实现InitializingBean接口,调用afterpropertiesSet方法。
自身init-method方法
BeanPostProcessor接口after方法。
是否实现DisposableBean接口,调用destroy()方法。
自身destroy-method方法
springBean默认为单例singleton
多线程操作单例bean的非静态成员变量会又线程安全问题。
解决办法:避免定义可变的成员变量。
在类中定义TreadLocal成员变量,将需要的可变成员变量保存在TreadLocal中(推荐)