SpringIOC

Spring-IOC
1、什么是IOC、DI
有A、B两个对象有各自的属性和方法,在B对象中调用了A对象的方法,传统方式:在程序中主动创建(new)A对象、B对象,并且把A对象传入B对象中,Spring是通过给IOC容器一个装配文件,IOC容器根据文件创建A对象,B对象,这就是控制反转,并且根据配置文件里的注入配置把A对象注入到B对象,这就是依赖注入。

SpringIOC接口容器:
Spring的两个主要的接口容器:BeanFactory、ApplicationContext
BeanFactory:基础IOC容器,采用延迟初始化方式,只有当客户端需要访问某个收管理对象,才对该对象进行初始化以及依赖注入操作,相对来说,容器启动初期速度快,所需资源较少
ApplicationContext:间接继承了BeanFactory接口,拥有其所有支持,容器所管理的对象,在容器启动后,默认全部初始化并完成绑定,需要资源更多,启动时间更长
ApplicationContext常用实现类:
ClassPathXmlApplicationContext 加载类路径下的xml文件
FileSystemXmlApplicationContext 加载文件系统下的文件
XmlWebApplicationContext 读取web应用下的文件

三种装配方式:
1、在XML中进行显示装配
2、在Java中进行显示装配
3、自动(注解)装配
自动装配:
1、组件扫描(componment scanning):Spring会自动发现应用上下文中所创建的bean
2、自动注入:Spring自动满足bean之间的依赖(@Autowirded):可以标注在属性、方法、构造函数上
注解:
@Componment @Autowirde :Spring特有
@Named @Inject : 源于Java依赖注入规范

扩展:
@Componment、@Rpository、@Service、@Controller

生成bean的名称:默认生成的bean指定一个ID就是类名首字母小写,也可以通过注解的属性手动指定bean名称@Named()

Java代码显示装配:
自动装配不能满足的情况下使用:比如将第三方库中的组件装配应用中,不能在第三方库源代码中添加@Componment、@Autowirde等注解
JavaConfig:Java配置类
@Configuration
@ComponmentScan(basePackages = {“指定需要扫描的包名”})
@ComponmentScan(basePackageClasses = {“类名.class”})
@Bean
生成bean的名称:默认情况是带有@Bean注解的方法名称,也可以通过@Bean(name="")指定

XML装配:

<beans></beans>
<bean></bean>
<construct-args></construct-args>
<property></property>

生成的bean的名称:一般是根据id属性指定
<context: componment-scan base-package = “包名”/>
获取ApplicationContext:
ApplicationContext context = new ClassPathXmlApplicationContext(".xml")
context.getBean(“类名”)

DI(依赖注入):
手动注入:
1、构造方法注入(constructor injection):
(1)根据构造函数索引注入
(2)类型注入<type=“参数类型”>
(3)名称注入<name = “name”>
需要配合@ConstructorProperties(“name1”,“name2”)使用
2、setter方式注入

注入对象如果是容器内bean:使用ref元素或者内置bean元素的方式
3、自动注入

自动装配的歧义:
@Autowired byType
一个接口有多个实现类,都@Componment在IOC容器里创建了bean,@Autowirde注入接口,无法确定注入具体哪个实现类
解决:
1、指定首选:@Componment @Primary
2、@Autowired @Qualifier(“名称”) byName

Bean的作用域:
单例(singleton): 在整个应用中,只创建bean的一个实例
原型(prototype): 每次注入或通过Spring应用上下文获取的时候,都会创建一个新的bean实例
会话(session): 在web应用中,为每个会话创建一个bean实例
请求(request):在web会话中,为每个请求创建一个bean实例

Spring应用上下文中bean默认是Singleton
根据装配方式不同,设置作用域方式:
自动装配:
@Componment
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
或者@Scope(“prototype”)

Java显示装配:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
或者@Scope(“prototype”)

XML显示装配:


```xml
<bean id="" class="" scope="prototype"></bean>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值