IOC
容器 被动接受创建好资源
DI
依赖注入 容器能知道 组件在运行时需要哪些组件,通过反射的形式进行注入
只要 容器管理的组件,都能使用容器提供的强大功能
测试核心容器
安装eclipse插件 导包 创建spring配置文件
//通过配置文件取得容器
ApplicaiontContext ioc = new ClassPathXmlApplicationContext(“”)//spring配置文件path
//获得组件
Ioc.getBean(id)
容器如果没有组件 —> NoSuchBeanDefinitionException
同样类型的bean有多个—>NoUniqueBeanDefinitionException
bean的属性abstract设为true,不能被直接创建—>BeanIsAbstractException
有参构造器赋值
</>
不能引用内部bean的id
Bean的作用域
Prototype 多实例的 获取的时候创建
Singleton 单实例的 容器启动时创建
Request
Session
静态工厂
实例工厂
实现FactoryBean接口
带有生命周期的Bean
后置处理器
实现BeanPostProcessor接口
postProcessBeforeInitialization
postProcessAfterInitialization
spring管理连接池
引用外部配置文件
context:property-placeholder/
自动装配
Default/no 不自动赋值
Byname 在容器中 以属性名作为id找组件进行赋值
Bytype 在容器中 以类名作为id找组件进行赋值
Constructor 先按照有参构造器的类型匹配,如果有多个:则用参数名作为id继续匹配
SpEL
#{}
静态方法
T(类名.静态方法)
非静态方法
Id.方法名
注解
导入aop包
@Controller 控制器层
@Service 业务逻辑层
@Repository 数据库层,持久化层,dao层
@Component 给不属于以上几层的组件
spring底层不验证service是不是service 其他同理
组件扫描配置
<context:component-scan base-package=“”></context:component-scan>
Id默认是类名首字母小写 默认单例
改名@Repositroy(“newName”)
多实例 @Scope(value=“protoType”)
扫描时排除一些组件
<context:component-scan base-package=“”>
<context:exclude-filter type=“annotation” expression=“org.spring.Controller”/>
type=“assignable” 类的全类名
Aspects aspectj表达式
Custom 自定义TypeFilter
Regex 正则表达式
<context:include-filter use-default-filter=“false”/>
</context:component-scan>
@Autowired原理
先按照类型去容器找组件
->找到一个
->没找到 —>抛异常
->找到多个 —>按照变量名作为id匹配
—>找到
—>没找到 —>抛异常
@Qualifer(“指定id”)
@Autowired(required=false). —>找不到—>装配null
方法上有@Autowired
Bean创建的时候自动运行,每个参数都自动赋值
@ContextConfiguration(“classpath:applicationContext.xml”)指定Spring配置文件的位置
@RunWith(SpringJUnit4ClassRunner.class)使用Spring的单元测试模块来执行@Test的测试方法
配置监听器
web.xml
contextConfigLocation
classpath:applicationContext.xml
通过spring封装的静态方法获取可用容器
WebApplicationContext ioc = ContextLoader.getCurrentWebApplication