1. IOC
控制反转
1.1 DI注入(依赖注入)
1.1.1 set注入 和 构造器注入
set注入: 基于字节码对象, 通过反射获取set方法注入参数
构造器注入: 基于字节码对象, 通过反射获取构造器注入参数
<!--在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例) -->
<bean id="person3" class="org.example.pojo.Person" scope="singleton" >
<constructor-arg name="id" value="103"/><!--通过构造器注入-->
<constructor-arg name="name" value="jojo"/>
<constructor-arg name="home" ref="home"/>
</bean>
<bean id="home" class="org.example.pojo.Home">
<property name="id" value="203"/><!-- set方法注入 -->
<property name="address" value="beijing"/>
</bean>
1.1.2 通过注解方式注入
注解方式是通过反射直接获取成员变量, 并赋值
<!--通过组件扫描器扫描指定包-->
<context:component-scan base-package="org.example.pojo"/>
//通过组件扫描器+注解@Component(作用于类)+@Value(基本类型的成员变量)+@Autowired或@Resource(引用类型的成员变量)
// @Autowired默认按照byType注入,@Autowired+ @Qualifier("名称")是按照名称注入
// @Resource默认按照byName注入,没有找到就按照类型注入
1.1.3 xml文件配置时, autowire属性:按照byName和byType注入
<!-- bean创建时会调用对象的init-method方法, 在销毁时会调用destroy-method方法 -->
<bean id="person1" class="org.example.pojo.Person" autowire="byName" init-method="myInit" destroy-method="myDestory" >
<property name="id" value="100"/> <!--property是set注入-->
<property name="name" value="jack"/>
</bean>
//xml文件配置:autowire = byName按照成员变量的名称自动注入
@Test
public void byName(){
ApplicationContext ac = new ClassPathXmlApplicationContext("bean-autowireByName.xml");
Object person1 = ac.getBean("person1");
System.out.println(person1);
}
<bean id="person2" class="org.example.pojo.Person" autowire="byType">
<property name="id" value="101"/>
<property name="name" value="tom"/>
</bean>
//xml文件配置:autowire = byType成员变量类型自动注入
@Test
public void byType(){
ApplicationContext ac = new ClassPathXmlApplicationContext("bean-autowireByType.xml");
Object person2 = ac.getBean("person2");
System.out.println(person2);
}
1.2 spring的生命周期
2. AOP
面向切面编程