IOC的原理反射,AOP的是代理
1、IOC和DI的关系:
关于IOC和DI,控制反转和依赖注入
IOC 控制反转,以前的使用类里的方法,需要创建对象,调用里面的方法,现在创建对象 是靠spring 来管理,从之前的主动创建对象使用方法,到现在的被动等待spring创建好对象。
DI,是依赖注入,把创建的对象放到spring容器中,某个类里使用某个对象的时候,需要注入到这个类里面,对属性赋值
IOC和DI 的关系,是必须现有IOC控制反转后,才能再有DI依赖注入
IOC控制反转,就是创建bean,方式分为xml方式和注解方式
DI注入依赖,就是注入bean,方式也分为xml方式和注解方式
现在先,总结下,IOC和DI,都用xml方式
2、bean对象的作用范围
3、bean对象的生命周期
4、bean的实例化过程
5、Spring当中解决循环依赖的方法,什么场景下需要解决循环依赖
6、FactoryBean 和BeanFactory 以及普通的Bean三者的关系及区别
IOC 创建bean的三种方式(xml)
注意:xml里导入的约束 跟注解方式在xml里导入的约束是不一样的, 注解里的约束多了 spring-context
第一种 使用类的无参数构造创建(重点)
第二种 使用静态工厂创建
(1)创建静态的方法,返回类对象
第三种 使用实例工厂创建
(1)创建不是静态的方法,返回类对象
DI 注入的三种方式(xml)
注入的三种方式xml
使用有参数构造注入属性
使用set方法注入属性(重点)
注入对象类型属性(重点)
注入复杂类型属性
IOC 创建bean的方式(注解)
注解的方式同xml创建<bean>的结果是一样的,
注解:
@Component:
在创建对象的类上面使用注解实现
作用:用于把当前类对象存入spring容器中
属性: value,用于指定bean的id。当我们不写的时候,默认取的值是当前类名,且首字母改小写。
创建对象有四个注解
目前这四个注解功能是一样的,都创建对象
@Component
@Controller 一般用在表现层
@Service 一般用在业务层
@Repository 一般用在持久层
以上三个注解他们的作用和属性与Component是一模一样的,他们三个是spring框架为我们提供明确的三层使用的注解,使我们三层对象更加清晰。
DI注入的方式(注解)
用于注入数据的
他们的作用和在xml配置文件中的<bean>标签中写一个<property>标签的作用是一样
@Autowired
作用:自动按照类型注入,只要容器中有唯一的bean对象类型和要注入的变量类型匹配,就可以注入成功
spring 的IOC容器是一个map结构,
@Resource 注入的第二个注解
3、用于改变作用范围的
他们的作用和在bean标签中使用scope属性实现的功能是一样的,设置单例 @Scope(value="")和多例@Scope(value="prototype")
4、和生命周期相关的
他们的作用和在bean标签中使用init-method和destroy-method的作用是一样的
Spring新的注解:
@Configuration
作用:指定当前类是一个配置类
@ComponentScan
作用:用于通过注解指定spring在创建容器时要扫描的包
属性:value,它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包
我们使用此注解就等同于在xml中配置了
<context:component-scan base-package="com.xxx.xxx"></context:compoent-scan>
@Bean
作用:用于把当前方法的返回值作为bean的对象存入spring容器中
属性:name,用于指定bean的id,当不写时,默认值是当前方法的名称
例子:
@Bean
public QueryRunner createQueryRunner (DataSource dataSource){
return new QueryRunner(dataSource);
}
@Scope
作用:设置多例 或者单例 多例的话 propertype
用注解的方式,和xml,首先xml文件配置的约束是不一样的,其次是启动spring容器方式也不一样了
xml方式是 ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
注解方式是 ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
@Import
导入父类的包
@PropertySource
@Qualifier
spring整合junit