IOC概念补充https://www.cnblogs.com/xdp-gacl/p/4249939.html
属性注入XML配置
<!-- class :通过反射的方式在IOC容器中创建bean,所以bean必须有无参数构造器
id:容器中bean的唯一标识
-->
<!-- set依赖注入,必须有set方法 -->
<bean id = "personbyset" class="test.Person">
<property name="name" value="jerry"></property>
<!-- 设为null -->
<property name="age"><null></null></property>
<!-- 内部 bean, 类似于匿名内部类对象. 不能被外部的 bean 来引用, 也没有必要设置 id 属性 -->
<property name="address">
<bean class="test.Address">
<property name="address" value="tj"></property>
</bean>
</property>
</bean>
构造器注入
<!-- 构造器注入,必须有对应的参数的构造方法 -->
<bean id = "person" class = "test.Person">
<constructor-arg value="tom" name="name"></constructor-arg>
<constructor-arg value="12"></constructor-arg>
</bean>
一些XML的特殊配置
构造器按照参数类型注入、构造器按照位置类型注入 、特殊字符使用CDATA、引用外部bean
<!-- 构造器按照参数类型注入 -->
<bean id = "personbytype" class = "test.Person">
<constructor-arg value="tom1" type="java.lang.String"></constructor-arg>
<constructor-arg value="12" type="java.lang.String"></constructor-arg>
</bean>
<!-- 构造器按照位置类型注入 -->
<bean id = "personbyindex" class = "test.Person">
<constructor-arg index="1">
<!-- 特殊字符使用CDATA -->
<value><![CDATA[<shangh>]]></value>
</constructor-arg>
<constructor-arg value="12" index="0"></constructor-arg>
<!-- 引用bean -->
<constructor-arg><ref bean="address"/></constructor-arg>
</bean>
集合属性
<bean id = "address" class="test.Address">
<property name="address" ><value>bj</value></property>
</bean>
<!-- 配置bean的list -->
<bean id = "users" class="test.Users">
<property name="addresses">
<list>
<!-- 引用外部bean -->
<ref bean="address"/>
<!-- 使用内部bean -->
<bean class="test.Address">
<property name="address" value="tj2222222"></property>
</bean>
</list>
</property>
</bean>
Person类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Person {
public String name;
public String age;
public Address address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
public Person(){
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address
+ "]";
}
public Person(String name, String age, Address address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public static void main(String[] args) {
// 获取IOC容器对象
ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从IOC中获取bean实例
Person p = (Person) c.getBean("person");
//
System.out.println(p);
Person personbyset = (Person) c.getBean("personbyset");
System.out.println(personbyset);
}
}
Address类
public class Address {
public String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Address [address=" + address + "]";
}
public Address() {
}
}
User类
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Users {
public List<Address> addresses;
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
@Override
public String toString() {
return "Users [addresses=" + addresses + "]";
}
public Users() {}
public Users(List<Address> addresses) {
super();
this.addresses = addresses;
}
public static void main(String[] args) {
// 获取IOC容器对象
ApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从IOC中获取bean实例
Users u = (Users) c.getBean("users");
System.out.println(u);
}
}
网友评论