SpringIOC容器(2)

p 命名空间
为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。
Spring 2.5 版本开始引入了一个新的 p 命名空间,可以通过 <bean> 元素属性的方式配置 Bean 的属性。
使用 p 命名空间后,基于 XML 的配置方式将进一步简化
xmlns:p ="http://www.springframework.org/schema/p"
 
 
   <bean id="fruit" class="com.zzxtit.springboot.ioc.di.fruit" p:userName="root" p:dbName="mysql">
   </bean>  

 

引用外部属性文件
Spring 提供了一个 PropertyPlaceholderConfigurer BeanFactory 后置处理器 , 这个处理器允许用户将 Bean 配置的部分内容外移到属性文件中 . 可以在 Bean 配置文件里使用形式为 ${ var } 的变量 , PropertyPlaceholderConfigurer 从属性文件里加载属性 , 并使用这些属性来替换变量 .
需要先引入配置文件
xmlns:context="http://www.springframework.org/schema/context"
   <context:property-placeholder location="config/db.properties"/>
   <bean id="dbConnection" class="com.zzxtit.springboot.ioc.di.DBConnecton" p:dbUrl="${mysql-url}">
   		<property name="driver" value="${mysql-driver}"></property>
   </bean>

比如加载数据库地址,数据库连接类等,都可以用此方法,优点:可以不在项目文件中做修改就可以更改配置文件

Spring 表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言。

 

语法类似于 EL SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL
SpEL bean 的属性进行动态赋值提供了便利
SpEL 作用:
通过 bean id bean 进行引用
调用方法以及引用对象中的属性
计算表达式的值
正则表达式的匹配
    <bean id="dbUtil" class="com.zzxtit.springboot.ioc.spel.DBUtil">
    	<property name="encoding" value="#{constance.ENCODING_UTF8}"></property>
    	<property name="number" value="#{constance.getNumber()}"></property>
    </bean>
引用其他对象或属性。
 
调用其他对象的方法,还可以进行链式操作。
    <bean id="constance" class="com.zzxtit.springboot.ioc.spel.Constance"> </bean>
    
    <bean id="dbUtil" class="com.zzxtit.springboot.ioc.spel.DBUtil">
    	<property name="encoding" value="#{constance.ENCODING_UTF8}"></property>
    	<property name="number" value="#{constance.getNumber()}"></property>
    </bean>

依赖注入自动装配

语法:<bean id="..." class="..." autowire="byType"/>

autowire属性取值如下:

byType: 按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的 bean 。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为 null
byName: 按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的 bean ,如果没有找到,即属性值为 null
constructor byType 的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的 bean ,那么将会抛出异常。
   <bean id="FRUIT" class="com.zzxtit.spring.ioc.di.FRUIT" autowire="byType">

   </bean>

缺点自动装配会装配Bean的所有属性,不够灵活

autowire 属性要么根据类型自动装配, 要么根据名称自动装配, 不能同时进行

classpath自动扫描Bean组件

在XML文件中注册需要装配的路径

<context:component-scan base-package="com.zzxtit.springboot.ioc.auto"></context:component-scan>
特定组件包括 :
§ @Component: 基本注解 , 标识了一个受 Spring 管理的组件
§ @ Repository : 标识持久层组件
§ @Service: 标识服务层 ( 业务层 ) 组件
§ @Controller: 标识表现层组件
如果一个接口有两个以上的实现类,则需要指定某个具体的类。或者在接口对象上加上
注解@Qualifier("")来指定具体的实现类,否则会出现异常
	@Autowired
	@Qualifier("userOracleDao")
	private UserDao userDao;
第二种办法是在方法上加注解,可以取得同样的效果
	@Autowired
	@Qualifier("userOracleDao")
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值