1.1 控制反转Ioc
- IOC(Inversion of Control,控制反转) IOC在Spring中通过依赖注入DI实现
- 个人理解就是将所有类的创建、销毁都交给Spring这个容器来控制,这就形成了控制反转
- 所有类都在Spring中存储,Spring会知道你是个什么玩意,你需要什么,然后Spring会在程序运行到合适的时候,把你需要的东西给你,同时别的类需要你就给别的类。
1.2 DI
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
通俗点解释就是,当对象a需要一个对象b,或者需要b的一个方法,spring就会在系统运行到一定的时候,将需要的东西注入到a中,因此就形成了a依赖于b的依赖关系。
1.3 aop
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。(先简单介绍一下,后面再写一篇文章专门解释)
2.1.什么是bean的装配
bean的装配呢,可以理解为依赖注入,而bean的装配方式就是bean依赖注入的方式,装配方式分为3种。
2.2 基于xml的形式装配
<!-- id是对外的名称,class是指定地址,指定包名内部的类,
整个是配置一个Spring容器把这个类装进去 -->
<bean id="userDao" class="com.yang.impl.userDaoImpl"></bean>
2.3 基于注解的形式装配
- @Autowired 按类型自动装配
- @Qualifier 按名称自动装配不能单用要和@Autowired一起用
- @Resource 是前面两种的结合
2.4 基于Java配置类的装配
@Configuration //表示这个类是用来配置Bean的
class Config{
@Value("张三") String name; //创建一个成员变量,相当于String name="张三";
@Bean(name = "student") //配置一个Bean,相当于xml中的一个<bean>
public Student student(){
Student student=new Student(name); //创建并返回Bean的实例。
return student;
}
3.依赖注入的方式
- 属性注入又称set注入(最常用的)
- 构造器注入
- 工厂方法注入(很少使用,不推荐大家使用,这里就不介绍了)
3.1 set注入
<!-- set注入方式 -->
<bean id="userService" class="com.liu.service.impl.userServiceImpl">
<!-- ref是引用的这个对象(可引用其他的bean对象) -->
<!-- name是属性对应的set方法名去掉set后首字母小写的名字 -->
<property name="userDao" ref="userDao"></property>
<!-- value是引用这个对象名字的字符串;直接设置一个值(赋一些简单类型的值) -->
<property name="name" value="张三"></property>
</bean>
3.2 构造注入
<!-- 构造注入方式 -->
<bean id="user" class="com.liu.pojo.user">
<constructor-arg index="0" value="小刘"></constructor-arg>
<constructor-arg index="1" value="123456"></constructor-arg>
<constructor-arg index="2">
<list>
<value>编程</value>
<value>运动</value>
</list>
</constructor-arg>
</bean>
- 通过构造方法注入bean的属性值或依赖的对象,他保证了Bean实例在实例化就可以使用
- 构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性
- 使用构造器注入属性值可以指定参数的位置和参数的类型,来区分重载的构造器。
id:我们从IOC容器取出的唯一标识,一般是类名的首字母小写
class:bean的全类名,通过反射的方式来创建bean,所以要求bean必须有无参的构造器
constructor-arg:value是赋值,index是参数的位置,type是参数的类型