Spring基础知识(2)
来源:互联网 发布:lol网吧代理软件 编辑:程序博客网 时间:2024/04/30 20:02
一、Spring的Bean属性的依赖注入
为一个Bean设置属性,有三种注入属性的方式:
1)接口注入
2)构造器注入
3)setter方法注入
详细介绍如下:
接口注入:
public interface Injection{
public void injectName(String name);
}
为对象注入name属性
public class User implements Injection{
public void injectName(String name){
this.name = name;
}
private String name;
}
构造器注入:
public class User{
private String name;
public User(String name){
this.name = name;
}
}
setter方法注入:
public class User{
private String name;
public void setName(String name){
this.name = name;
}
}
☆:Spring框架支持构造器注入和setter方法注入。
Spring中属性的依赖注入:
第一种:构造器注入,通过 <constructor-arg> 元素完成注入
public class Car {private String name;private double price;public Car(String name, double price){super();this.name = name;this.price = price;}@Overridepublic String toString() {return "Car [name=" + name + ", price=" + price + "]";}}
<!-- 构造器注入 --><bean id="car" class="lsq.spring.c_di.Car"><!-- 通过构造器参数,完成属性的注入 --><constructor-arg index="0" type="java.lang.String" value="奥迪"></constructor-arg><constructor-arg index="1" type="double" value="500000"></constructor-arg></bean>第二种:setter方法注入, 通过<property> 元素完成注入
public class Car2 {private String name;private double price;//注入属性时,只需要提供set方法public void setName(String name) {this.name = name;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car2 [name=" + name + ", price=" + price + "]";}}
<!-- setter方法注入 --><bean id="car2" class="lsq.spring.c_di.Car2"><!-- 通过property元素完成属性注入 --><property name="name" value="JEEP"></property><property name="price" value="200000"></property></bean>* 使用 <property> 元素 ref属性,引入另一个Bean对象,完成Bean之间注入
public class Employee {private String name;private Car2 car2;public void setName(String name) {this.name = name;}public void setCar2(Car2 car2) {this.car2 = car2;}@Overridepublic String toString() {return "Employee [name=" + name + ", car2=" + car2 + "]";}}
<bean id="employee" class="lsq.spring.c_di.Employee"><property name="name" value="wade"></property><property name="car2" ref="car2"></property></bean>以上逻辑的测试代码如下:
import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * 完成依赖注入的测试 * * @author lishanquan * */public class DITest {@Testpublic void demo1(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Car car = (Car) applicationContext.getBean("car");System.out.println(car);}@Testpublic void demo2(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Car2 car2 = (Car2) applicationContext.getBean("car2");System.out.println(car2);}@Testpublic void demo3(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Employee employee = (Employee) applicationContext.getBean("employee");System.out.println(employee);}}
二、* 名称空间 p的使用 (Spring2.5 新特性)
spring2.5版本 引入名称空间p, 简化属性注入的配置
p:<属性名>="xxx" 引入常量值
p:<属性名>-ref="xxx" 引用其它Bean对象
具体使用步骤:
1) 引入p名称空间
2)改写<property>注入为 p名称空间注入
修改为如下所示:
测试结果相同。
三、* spring3.0之后引入 spEL 表达式
1、完成对象之间注入
修改为
2、使用另一个Bean属性完成注入
<span style="white-space:pre"></span><bean id="carInfo" class="cn.itcast.spring.e_di.CarInfo"></bean><bean id="car2_2" class="cn.itcast.spring.e_di.Car2"><property name="name" value="#{carInfo.name}"></property></bean>3、 使用另一个Bean方法完成注入
<bean id="carInfo" class="cn.itcast.spring.e_di.CarInfo"></bean><bean id="car2_2" class="cn.itcast.spring.e_di.Car2"><property name="name" value="#{carInfo.name}"></property><property name="price" value="#{carInfo.caculatePrice()}"></property></bean>
四、集合属性的注入
Spring提供专门标签完成List、Set、Map、Properties等集合元素属性注入。
1) 注入List (数组)
import java.util.List;public class CollectionBean {private List hobbies;public void setHobbies(List hobbies) {this.hobbies = hobbies;}@Overridepublic String toString() {return "CollectionBean [hobbies=" + hobbies + "]";}}
<!-- 集合属性注入 --><bean id="collectionBean" class="lsq.spring.c_di.CollectionBean"><property name="hobbies"><list><!-- <value>标签注入基本类型,<ref/>注入复杂类型 --><value>体育</value><value>音乐</value></list></property></bean>2)注入Set
<property name="numbers"><set><value>10</value><value>6</value><value>15</value></set></property>3)注入Map
<property name="map"><map><span style="white-space:pre"></span><!-- 复杂类型<entry key-ref="" value-ref=""></entry> --><entry key="name" value="wade"></entry><entry key="address" value="迈阿密"></entry></map></property>
4)注入Properties
* java.utils.Properties 类 继承 java.utils.HashTableProperties key和value都是String类型。
例如:
<property name="properties"><props><prop key="company">NBA</prop><prop key="pnum">100</prop></props></property>
五、在Spring框架中引入多个XML配置文件
1、并列引入多个XML
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans1.xml", "beans2.xml");2、引入总xml文件,在总xml文件引入 子xml文件
<span style="white-space:pre"></span>ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");<span style="white-space:pre"></span>* 在applicationContext.xml 中 <import resource="classpath:bean1.xml"/><import resource="classpath:bean2.xml"/>在开发中主要使用 第二种 , 将配置文件分离配置 便于维护管理
- Spring基础知识(2)
- Spring基础知识(1)
- Spring基础知识(3)
- Spring基础知识(4)
- Spring基础知识(一)
- Spring基础知识(二)
- Spring基础知识(三)
- Spring基础知识(一)
- Spring基础知识(5)-AOP
- Spring基础知识(6)-AOP2
- Spring基础知识(7)-Aspectj
- Spring基础知识(8)-JdbcTemplate
- Spring基础知识(9)-事务管理
- spring基础知识2:最小化spring xml
- Spring基础学习-(1)Spring基础知识
- spring基础知识
- Spring基础知识
- Spring基础知识
- PAT1005Spell It Right (20)
- Windows下查询命令行启动参数
- 图片预加载与懒加载
- java-连接access
- 《Motion Design for iOS》(十四)
- Spring基础知识(2)
- CSS 动画的 steps()
- Android AsyncTask的理解
- 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- 【Windows】【Runtime Error】Explorer.exe异常
- 第8章:structures, unions, and enumerations
- 待后续了解
- 数据分析/数据挖掘/机器学习---- 必读书目
- thinkphp 分组、页面跳转与ajax