1.spring的介绍 一句化概括就是一个平台,有它能够更加方便集成其他环境
ioc 控制反转: 获取Class反射通过解析xml文件
不用new交给spring容器去创建 使用xml或注解配置类
先有组件才能使用容器去装,激活组件以提供特定的功能
DI 依赖注入:不需要手动调用set 通过反射 配置xml赋值或注解配置类赋值。setter注入(使用xml配置已很少使用),构造器注入,注解注入
依赖注入是控制反转的基础,否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?
非侵入式:基于spring开发的应用对象可以不依赖spring的API
aop:面向切面(方法)编程 与后置处理器相关 使用动态代理proxy与cglib代理拦截执行方法
容器:一切依赖于applicationContext,创建一个spring容器
组件化:ioc容器,用来组装不同的资源相互依赖使用。提供高效率的注解开发环境
一站式:胶水 粘合不同内容,spring用来管理所有的组件。声明式事务,springSecurity等
2.注解:
@Configuration 配置类
@Bean 给容器注册一个bean
@ComponentScans(value={数组})
@ComponentScan(value=“包名”,excludeFilter/includeFilter={@Filter=排除规则,classes={数组}}) 包扫描注解及指定排除规则(注解,指定类,自定义)
includeFilter需要加上@useDefaultFilters=false
语义不同而已(规范)
@Repository dao层数据库
@Controller servlet控制前端层
@Service 业务逻辑层
@Component 其他层(例如@Configuration注解力包含了该注解) 将当前类作为组件加入ioc容器中
bean对象默认单实例
ioc容器启动会调用方法创建对象放到ioc容器中,以后每次从容器中(map.get())拿
@Lazy 懒加载:第一次使用再创建对象
@Scope(“prototype”)多实例 一开始不会调用方法创建对象,用到创建
@Conditional 按照条件注册bean
@Import({可以为数组}) 要导入到容器中的组件,ioc容器会自动注册这个组件,id默认是全类名
ImportSelector: 自定义导入组件,实现该接口
ImportBeanDefinitionRegistrar:手动注册bean到容器
FactoryBean :实现该接口,调用getObject()方法创建bean
3.默认加在ioc容器中的组件,容器启动默认调用无参构造器创建对象,在进行初始化赋值等操作
容器管理bean的生命周期:bean创建-初始化(对象赋值创建完成)-销毁(容器关闭,多实例不会管理)
可以自定义初始化和销毁方法 init(),destroy()
@bean(initMethod=init(),destroyMethod=destroy())
@Component
让bean实现实现InitializingBean,DisposableBean接口
@PostConstruct 对象赋值创建完成后执行初始化方法
@PreDestroy ioc容器销毁bean之前通知方法
@Component
实现BeanPostProcessor接口 bean的后置处理器-初始化前后进行处理工作
初始化之前工作 postProcessorBefore
初始化之后工作 postProcessorAfter
底层使用代理对象和AOP编程实现对bean初始化操作
4.使用配置文件配置类注解对属性赋值
@PropertySource(value={}) 读取外部文件的K/V保存到@Value("")
spring框架
自动装配:利用DI依赖注入完成对IOC容器各个组件的依赖关系赋值
@Autowired(required=false) 按类型按组件名区ioc容器中找到注入 标注在属性上,方法,有参构造器,参数上。都从ioc中获取
@Qualifier(“指定组件名id”)
@Primary 首选bean
java规范
@Resource只按主键名id
@Inject 导入依赖同autowired
实现Aware接口
5.标注环境@Proflie(“test”)不同开发环境下使用数据源和方法