Spring_IOC

SpringIOC

Spring_IOC

概念:
控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来
减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。
通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象
的引用传递给它。也可以说,依赖被注入到对象中。
Spring最核心的概念就是IOC或者DI。
使用Spring你不必在程序中维护对象的依赖关系,只要在配置文件或注解中设定,Spring容器会自
己根据相关的配置去产生他们之间的关系,就相当于在所有的关系都是在容器运行的时候注入,
而本身他们的关系是没有的。
bean 实例化的方式有4种:

1:构造器实例化(最常用,最标准),默认调用类的无参构造器来初始化对象,与构造器的访问修饰符无关。
	<bean id="hell" name="hello,h,m,c" class="com.zhiyou100.Hello"></bean>
	<bean id="hello1" class="com.zhiyou100.Hello"></bean>
2:静态工厂实例化(了解)
<bean id="staticHello" class="com.zhiyou100.StaticHello" factory-method="getHello"></bean>
3:实例工厂实例化(了解)
 *实例工厂获取bean 第一步先配置工厂bean* 
<bean id="hellofac" class="com.zhiyou100.HelloFactory"></bean>
 *第二步:引用工厂bean,及方法* 
<bean id="helloFactory" class="com.zhiyou100.HelloFactory" factory-bean="hellofac" factory-method="getHello"></bean>
4:实现FactoryBean接口实例化(了解)
<bean id="helloFactory2" class="com.zhiyou100.HelloFactory2"></bean>

// 了解
SpringBean对象的作用域,在scope标签中:

singleton(单利模式):所有创建出来的对象都是单利的
prototype(多利模式):每一次创建的都是全新的对象
request:用于web开发,每次请求都会获得一个新的bean
session:同一个HTTP session共享一个Bean
globalSession:主要用于单点登录,分布式部署等。

SpringBean对象的创建与销毁:
单利情况下:我们可以指定 init-method=“open” destroy-method="close"在bean被
初始化及销毁的时候调用其中方法。
多利情况下:Spring不负责对象的销毁,只负责初始化操作
问:Spring管理的bean对象是什么时候被创建出来的?
答:在我们的Spring配置文件被加载的时候创建。

Spring常见的注入方式:

第一种:set注入,必须提供Set方法才可以实现
<bean id="man" class="com.zhiyou100.di.Man">
	<property name="name" value="#{'张三'}" />
	<property name="age" value="#{27}" />
	<property name="car" ref="car" />
</bean>
第二种:构造注入,通过构造方法来实现注入,index为构造方法参数下标
	<bean id="man" class="com.zhiyou100.di.Man">
		<constructor-arg index="0" value="张三" />
		<constructor-arg index="1" value="26" />
		<constructor-arg index="2" ref="car" />
	</bean>
	第三种:字段注入(后面完善)
	第四种:接口注入(知道有这个就好)
	第五种:类型注入(还是通过set注入)

Spring的三种装配方式:
1:XML手动装配(常用)
2:XML自动装配(了解)
如果根据name进行自动装配,要求set方法,要求Bean的ID与类中的属性名一致,如果找不到则不注入
如果根据"byType"进行自动装配,要求Spring中只有一个该类型的Bean,否则不知道要装配谁,会报错
如果根据constructor进行自动装配,要求有对应的构造方法,否则注入不进去
3:注解自动装配
@Autowired 标签的作用范围:字段上,与方法上 Spring提供的自动装配注解
会自动的去容器中寻找对象,首先根据类型去寻找,然后根据名字寻找如果寻找不到会抛异常,
如果找不到不想抛一场的话,可以设置属性required=false,寻找不到则不注入,如果找到多个
类型的Bean的话,会自动匹配字段名与ID,如果都匹配不上则会报异常,可以使用@Qualifier(“id”)
注解,告知指定ID或Name
@Resource(name=“womanq”) 属于JavaEE提供的注解,作用与@Autowired一样
区别为:默认先根据ByName 查询,如果查找不到在根据ByType查询,可以指定name,或type

Spring 用注解声明bean的四种方式:
@Component
所有受Spring管理组件的通用形式
@Controller
标识表现层组件
@Service
标识业务层组件
@Repository
标识持久层组件
实际上 下面 3种注解全部继承于Component,功能全部都一样,只是为了方便程序员区分
每一层的区别,而定义了每个层次专门的注解,当使用注解声明bean的时候,默认bean
名称是首字母小写的类名,如果需要指定bean名称,直接(“BeanName”)即可
使用注解形式声明bean需要在Spring.xml中配置注解扫描器。
<context:component-scan base-package=“com.zhiyou100” />

 	Spring Bean元素的继承,bean元素的继承与Java的继承是无关的
   		bean的继承是指,如果多个bean拥有同样的属性与值,则可以通过
   		定义一个抽象的bean,然后其他bean 使用parent属性继承即可
   <bean id="base" abstract="true">
   		<property name="name" value="张三" />
   		<property name="age" value="30" />
   </bean>
   <bean id="user" class="com.zhiyou100.model.User" parent="base">
   </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值