spring ioc容器注入的集中方式,以及属性注入的集中依赖,继承,使用SPEL表达式,ioc容器的生命周期,bean的几种工厂方法配置方式,bean的自动装配

注入方式:
1.属性注入方式
<property name=""  value=""/>
2.构造方法注入
<constructor >
自动装配:
SpringIOC容器可以自动装配Bean,选哟做的是仅仅是在<bean>的autowire水下那个里指定自动装配的模式
byType(根据类型自动装配)若IOC容器中有多个与目标Bean类型一致的bean。在这种情况下,springjia将无法
判定那个Bean类型一致的Bean最合适属性,所以不能指定自动装配。
byName(根据名称自动装配) 必须将目标bean的名称和属性名称设置的完全相同。
constructor(通过构造器自动装配)当bean的名称存在多个构造器时,此种方式将变得很复杂不推荐使用


继承Bean配置
Spring允许继承bean配置,被继承的bean成为父bean。继承这个父bean的bean成为子bean。
子bean从父bean中继承配置,包括bean的属性配置
子bean也可以覆盖从父bean继承过来的配置
父bean可以作为配置模版。也可以作为Bean实例。若只想把父bean。作为模版,可以设置<bean>
的abstract属性为true。这样spring将不会实例化这个Bean。
并不是<bean>元素里的所有属性都会被继承,比如autowire  abstract却不能被继承
也可以忽略父bean的class属性,让子bean指定自己的类。而共享相同的属性配置。但此时abstract属性必须为true
若某一个bean的class属性没有指定,则该bean必须是一个抽象bean.

bean之间的依赖
依赖Bean配置
spring允许用户通过depend-on属性设定基本bean的前置依赖。前置依赖的bean会在bean会在bean实例化之前创建好
如果前置依赖于多个bean。则可以通过逗号,则可以通过逗号,空格或的方式配置bean的名称。



使用外部属性文件:
在配置文件里配置bean时,有时候需要在bean的配置里混入系统部署的细节信息。(例如:文件路径,
数据源配置信息,等。而这些部署细节实际上需要和bean配置相分离)
spring提供了一个PropertyPlaceholderConfigure的BeanFactory后置处理器
这个处理器允许用户将bean配置文件里使用形式为${var}的变量。PropertyPlaceholderConfigure从属性文件里加载属性,并使用这些
属性来替换变量。
Spring还允许在属性文件中使用${propName},以实现属性之间的相互引用。
<!-- 导入属性文件 -->
<context:property-placeholder location="db.properties"/>
<bean id="datasource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
</bean>

使用SPEL表达式
spel即spirng的表达式语言,简称(spel)是一个支持运行时查询和操作对象图的强大的表达式语言。
语法类似于El:spel使用#{...}作为定界符。所有在大括号内的自负都将被认为spel
spel为bean的属性机型动态赋值提供了便利。
通过spel为bean的属性进行动态赋值,提供了便利。
通过spel可以实现
通过bean的id对bean进行引用
调用方法以及引用对象中的属性
计算表达式的值
正则表达式的匹配
1.引用bean.属性和方法
引用其他对象
通过value属性值和spel配置bean之间的应用关系
<property name="prefix" value="#{prefixgenerator}">
引用其他对象属性值。
通过value属性值和spel配置suffix属性值。为另一个bean的suffix属性之
<property name="suffix" value="#{sequenceGenerator.suffix}">
调用其他方法。还可以是链式操作
<!--通过value属性和spel配置suffix属性值。为另一个bean的方法的返回值-->
<property name="suffix" value="#{sequenceGenerator.toString()}">
方法的链接
<property name="suffix" value="#{sequenceGenerator2.toString().toUpperCase()}">
逻辑运算符    三目运算符
正则表达式:match
<property value="#{admin.email match('正则表达式')}">
调用静态方法和静态属性
通过T()调用一个类的静态方法。它将返回一个Class object 然后再调用相应的方法或者属性
注意格式就是T()其中括号里为类括号外事一个变量或者方法。中间用点隔开
<propety name="iinitvalue" value="#{T(java.lang.Math).PI}">

IOC容器中bean的生命周期
SpringIoc容器可以管理Bean的生命周期。Spring允许在bean生命周期的特定点执行定制任务。
SpringIoc容器对Bean的生命周期进行管理孤傲成
通过构造器或工厂方法创建bean实例
为bean的属性设置值和对其他Bean的引用
调用Bean的初始化方法。
bean可以使用了
当容器关闭时,调用bean的销毁方法。
在bean生命里设置init-method="" destory-method=""属性
为bean指定初始话和销毁方法。
添加Bean后置处理器后Bean的生命周期
Spring Ioc容器对bean的生命周期进行管理的过程
通过构造器或工厂方法创建bean实例
为bean的属性设置值和对其他bean的引用
将bean实例传给bean后置处理器。
postPorcessBeforeInitialization方法
调用Bean实例传递给bean后期处理器的postProcessAfterinitialization方法
bean可以使用了
当容器关闭时,调用bean的销毁方法


通过工厂化方法来配置bean
实例工厂方法:将对象的创建过程封装到两外一个对象实例的方法。当客户端需要请求对象时,只需要简单到调用该实例方法而不需要关心对象的创建细节
要声明通过静态工厂方法创建的bean。
在bean的factory-bean属性里制定拥有该工厂方法的bean。
在factory-method属性里指定该工厂方法的名称。
使用construtctor-arg元素为工厂方法传递参数。

通过注解的方式来配置bean
配置形式:基于xml文件的方式;基于注解的方式(基于注解配置bean;基于注解来装配beand的属性)
-bean的配置方式;通过全类名(反射)。通过工厂方法(静态工厂方法&实例工厂方法),factorybean
-ioc容器配置BeanFactory&ApplicationContext概述
-依赖注入方式:属性注入和构造器注入:工厂方法注入
注入属性细节

配置包含的是否包含某个类。
<!-- 指定ioc容器扫描的包以及子包里配置的注解类 ,其中base-package=""是要包含要扫描的包和其的所有子包。但是如果加上resource-patter则只扫描其属性值里相关的包。 
<context:component-scan base-package="com.test.spring.annoation" resource-pattern="auto/*.class"> 
</context:component-scan> -->
<!-- 下边是设定不包含的类。 -->
<context:component-scan base-package="com.test.spring.annoation" >
<!--<context:exclude-filter type="annotation"其中express属性值是倒入的系统包。 <context:exclude-filter 
type="annotation" expression="org.springframework.stereotype.Repository"/> -->
<!-- <context:include-filter>子节点 指定包含哪些类节点,但是需要在父节点中使用use-default-filters设置为false -->
<!--不包含某个类
<context:exclude-filter type="assignable" expression="com.test.spring.annoation.repository.UserRepository"/> -->
<!-- 只包含某个类
<context:include-filter type="assignable" expression="com.test.spring.annoation.repository.UserRepository"/>
-->
</context:component-scan>

使用@Autowired自动装配Bean
@Autowire注解自动配置具有兼容类型的单个bean属性
--构造器。普通字段(即使非public)一切具有参数的方法都可以应用@Autowired注解
--默认情况下,所有使用@Autowired注解属性都要被设置,当spring找不到匹配的bean装配属性时,会抛出异常。若某一个属性
不允许被设置,可以设置@Autowired直接的required属性为false;意思就是如果引用另外一个类的对象时候,那个类没有放入到ioc容器。
此时将会包异常,我们可以在该属性上边加上@Autowired(required=false).此时如果要打印该对象时候会打印出null,不会抛出错误异常
--默认情况下当ioc容器窜在多个类型兼容的bean时候,通过类型的自动装配将无法工作。此时可在@Qualifilter
已指定注入Bean的名称
--@Autowired注解也可以应用在数组类型的属性上。此时spring读取该属性集合的类型信息。然后自动装配所有与之兼容bean。
--@Authwired注解用在java.util.Map上时。若该map的键值为String。那么spring将自动装配与之Map值类型兼容的bean。此时bean的名称作为建筑

AOP前奏
--需求-日志:在程序执行期间追踪正在发生的活动。
--需求-希望计算器只能处理正数的预算。 
AOP简介
AOP(Aspect-Oriented Programming,面向切面编程)是一种新的方法论,是传统OOP(Object-Oriented Programming,面向切面编程)的补充
AOP的主要编程对象是切面(aspect)而切面模块化横切 关注点
在应用AOP编程。仍然需要定义公共功能,但可以明确的定义这个功能在哪里,以什么方式应用,并且不必修改受影响的类。这样以来
关注横切关注点就被模块化到特殊的对象(切面)里。
AOP的好处:
-每个事物逻辑位于一个位置。代码不分散,便于维护和升级
-业务模块更简洁。只包含核心业务代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值