< bean >标签的id和name的属性配置
id:使用了约束的唯一约束,并且里面不能出现特殊字符(如 / )
name:没有使用约束中的唯一约束(理论上是可以重复的,但实际上不允许),里面可以出现特殊字符。
例如:Spring和Struts1框架整合的时候,Struts1 将action 托管给Spring框架,带入字符, < bean name=”/user” class=””/>。
可以在ApplicationContext.xml中配置Bean的初始化方法以及销毁方法
init-method:Bean被初始化的时候执行的方法
destroy-method:Bean被销毁的时候执行的方法(Bean默认是单例创建,工厂关闭)
< bean name=“Service” class=“demo.ServiceImpl” init-method=“init” destroy-method=“destroy”>
同时需要在被托管的类中写 init 方法和 destroy 方法
public void init(){
System.out.println("类被初始化啦");
}
public void destroy() {
System.out.println("类被销毁啦");
}
scope:Bean的作用范围
构造方法的属性注入:
需要先在类中写一个有参的构造方法,然后再在配置文件中设置:
需要在类中提供相应属性的setXXX()方法,然后再在配置文件中使用value属性配置值。
value:设置普通类型的值
当依赖注入的类中有对象成员的时候,需要使用到 ref属性 来给对象成员赋值。
有user类和car类,car类是user类中的成员。
car类:
public class car {
String name;
String price;
public void setName(String name) {
this.name = name;
}
public void setPrice(String price) {
this.price = price;
}
}
user类:
public class user {
String name;
car car;
public void setName(String name) {
this.name = name;
}
public void setCar(demo.car car) {
this.car = car;
}
}
需要将两个类都托管在Spring中,也就是在xml中配置类,然后使用 ref 属性为 user 类注入 car 成员。
相当于是引用了 car 类的属性注入,再为自己的成员进行属性注入。
构造方法设置对象属性也是一样,同样在< constructor-arg>标签中使用ref属性进行设置。
< constructor-arg name=“car” ref=“car”/>
通过引入P:名称空间完成属性的注入
普通属性: p:属性名 = “值”
对象属性: p:属性名-ref = “值”
首先,先需要在xml的< beans>标签中添加一行代码,声明 p 名称空间
xmlns:p="http://www.springframework.org/schema/p "
将刚刚的user,car案例改一下注入方式:
SpEL:Spring Expression Language,Spring的表达式语言
< property name=“count” value="#{5}" />
在< property>元素的value属性中使用 #{} 界定符将值装配到Bean的属性中。
可以装配以下类型:
浮点型数字:#{89.7}
科学计数法:#{1e4}
字符或者字符串:#{‘moonlit’},{“moonlit”}
布尔值:#{true}
bean的对象:#{car}
其他类的成员:#{car.name}
其他类的方法:#{car.getName()}
运算或者字符串拼接:#{car.getPrice + 100},#{car.getName + car.getPrice}
正则表达式匹配:#{car.getEmail matches ‘[a-zA-Z0-9.%+]+@[a-zA-Z0-9.-]+\.com’},matches 是关键字
如果bean对象的成员是 数组,集合等,可以通过相对应的标签,往这些复杂类型的成员中依次注入值。
一样的也需要为各个成员配置getXXX 方法,以便Spring可以获取到。
基本类型的值使用value标签注入
对象类型的值使用ref标签 注入,还需要在Spring容器中配置相应Bean
CollectionBean类:
public class CollectionBean {
private String[] arrs;
private List list;
private Set set;
private Mapmap;
@Override
public String toString() {
return "CollectionBean{" +
"arrs=" + Arrays.toString(arrs) +
", list=" + list +
", set=" + set +
", map=" + map +
'}';
}
public void setSet(Set set) {
this.set = set;
}
public void setMap(Map map) {
this.map = map;
}
public void setList(List list) {
this.list = list;
}
public void setArrs(String[] arrs) {
this.arrs = arrs;
}
}
配置文件:
王东1
王东2
王东3
kk1
kk2
kk3
jj1
jj2
jj3