实体类
package pojo;
public class User {
private String name;
private Integer age;
private String sex;
private Car car;
public User() {
System.out.println("空参构造");
}
public User(String name, String sex, String age) {
}
private void inti(){
System.out.println("初始方法");
}
public void destroy(){
System.out.println("销毁方法");
}
public void a(){
System.out.println("我是"+name+",今年"+age+"岁"+",是个"+sex+"孩子。");
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package pojo;
public class Car {
private String brand;//品牌
private String color;
public void b(){
System.out.println(brand+color);
}
public Car() {
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
1.Spring的bean创建方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- bean的三种创建方式:-->
<!-- 1.空参构造:-->
<bean name = "user01" class="pojo.User">
</bean>
<!-- 2.静态工厂创建-->
<bean name="userFactory01" class = "demo2.UserFactory01"
factory-method="getUser"></bean>
<!-- 3.实例工厂 -->
<bean name="userFactory02" class="demo2.UserFactory02"></bean>
<bean name="getbean" factory-bean="userFactory02" factory-method="getUser"></bean>
</beans>
public class UserFactory01 {
/**
* 静态方法
* @return
*/
public static User getUser(){
System.out.println("静态工厂");
return new User();
}
}
public class UserFactory02 {
public User getUser(){
System.out.println("实例工厂");
return new User();
}
}
测试类
public class Demo2Test01 {
public static void main(String[] args) {
ApplicationContext ac =
new ClassPathXmlApplicationContext("demo2/spring-config.xml");
// 1.空参构造方法创建
User u1 = (User) ac.getBean("user01");
System.out.println(u1);
// 2.静态工厂创建
User u2 = (User) ac.getBean("userFactory01");
System.out.println(u2);
// 3.实例工厂创建
User u3 = (User) ac.getBean("getbean");
System.out.println(u3);
}
}
2.Bean的生命周期
通过配置标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method 作为 Bean 的销毁的时候执行的方法。 销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被销毁.<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="user1" class="pojo.User" scope="singleton"
init-method="inti" destroy-method="destroy">
<property name="name" value="小明"/>
<property name="age" value="21"/>
<property name="sex" value="男"/>
</bean>
</beans>
测试类
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
User user1 = (User) context.getBean("user1");
user1.a();
((ClassPathXmlApplicationContext)context).close();
}
}
3.Bean的scope属性
*掌握singleton:默认值,单例的.
prototype:多例的.
*了解
request:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
session:WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当
于 session.
4.bean注入方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="car" class="pojo.Car">
<property name="brand" value="兰博基尼"/>
<property name="color" value="黑色"/>
</bean>
<!-- 1.set注入:
property标签配置属性及属性值:
name:属性
value:属性值
-->
<bean name="user01" class="pojo.User">
<property name="name" value="张三"></property>
<property name="age" value="20"></property>
<property name="car" value="#{car}"></property>
</bean>
<!-- 2.构造方法注入:-->
<!-- constructor-arg :
name:属性
value:属性值
注:对应的类必须有对应的构造方法(参数的顺序不要求)
-->
<bean name="user02" class="pojo.User">
<constructor-arg name="name" value="李四"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
<constructor-arg name="age" value="20"></constructor-arg>
</bean>
<!-- 3.p标签注入-->
<bean name="user03" class="pojo.User" p:name="王五" p:age="19">
</bean>
<!-- 4.spel注入-->
<bean name="user04" class="pojo.User">
<property name="name" value="#{'赵四'}"></property>
</bean>
</beans>
测试类
/**
* 注入(给属性赋值)
*/
public class Demo3Test {
public static void main(String[] args) {
ApplicationContext ac =
new ClassPathXmlApplicationContext("vp/lu/demo3/spring-config.xml");
// 1.set注入
User user01 = (User) ac.getBean("user01");
user01.a();
// 2.构造方法注入
User user02 = (User) ac.getBean("user02");
user02.a();
// 3.p命名空间注入
User user03 = (User) ac.getBean("user03");
user03.a();
// 3.spel注入
User user04 = (User) ac.getBean("user04");
user04.a();
}
}
5.简单类型、引用类型、复杂类型的注入
实体类public class CollectionDemo {
private Object[] arr;// 数组
private List list;// list集合
private Map map;// map集合
private Properties pro;// properties集合
@Override
public String toString() {
return "CollectionDemo{" +
"arr=" + Arrays.toString(arr) +
", list=" + list +
", map=" + map +
", pro=" + pro +
'}';
}
public Object[] getArr() {
return arr;
}
public void setArr(Object[] arr) {
this.arr = arr;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Properties getPro() {
return pro;
}
public void setPro(Properties pro) {
this.pro = pro;
}
public CollectionDemo() {
}
}
spring-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="car" class="pojo.Car">
<property name="brand" value="兰博基尼"></property>
<property name="color" value="红色"></property>
</bean>
<!-- 复杂类型输入(集合)-->
<bean name="coll" class="demo4.CollectionDemo">
<!-- 1.数组类型注入-->
<!-- 1.1 数组注入一个元素-->
<!--<property name="arr" value="你好"></property>-->
<!-- 1.2 数组中注入多个元素-->
<property name="arr">
<list>
<value>10</value>
<value>夏松</value>
<value type="pojo.Car">#{car}</value>
</list>
</property>
<!-- 2.list集合中注入-->
<!-- 2.1 list注入一个元素-->
<!--<property name="list"><value>联想</value></property>-->
<!-- 2.2 list注入多个个元素-->
<property name="list">
<list>
<value>猫</value>
<value>狗</value>
<value>猪</value>
<value type="pojo.Car">#{car}</value>
</list>
</property>
<!-- 3.map集合中注入-->
<property name="map">
<map>
<entry key="1" value="111"/>
<entry key="2" value-ref="car"/>
<entry key-ref="car" value-ref="car"/>
</map>
</property>
<!-- 4.properties集合中注入-->
<property name="pro">
<props>
<prop key="星期一">morning</prop>
<prop key="星期六">noon</prop>
<prop key="放假了">afternoon</prop>
</props>
</property>
</bean>
</beans>
测试类
/**
* 注入复杂类型(集合)
*/
public class Demo4Test {
public static void main(String[] args) {
ApplicationContext ac =
new ClassPathXmlApplicationContext("vp/lu/demo4/spring-config.xml");
CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
System.out.println(coll);
}
}
6.分配置文件的使用
spring-config.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="demo2/spring-config.xml"></import>
<import resource="demo3/spring-config.xml"></import>
<import resource="demo4/spring-config.xml"></import>
</beans>
测试类
/**
* 分配置文件
*/
public class Demo5 {
public static void main(String[] args) {
fun2();
}
/**
* 由一个主配置文件管理其他配置文件,java只负责读取主配置文件
* 建议使用:
*/
private static void fun2() {
ApplicationContext ac =
new ClassPathXmlApplicationContext("spring-config.xml");
// demo3中配置文件
User user04 = (User) ac.getBean("user04");
user04.a();
// demo4中配置文件
CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
System.out.println(coll.toString());
}
/**
* java主动读取多个配置文件:
* 不建议使用:不方便,后期维护困难
*/
private static void fun1() {
// 1.同时读取多个配置文件
ApplicationContext ac =
new ClassPathXmlApplicationContext("vp/lu/demo4/spring-config.xml",
"vp/lu/demo3/spring-config.xml");
// demo3中配置文件
User user04 = (User) ac.getBean("user04");
user04.a();
// demo4中配置文件
CollectionDemo coll = (CollectionDemo) ac.getBean("coll");
System.out.println(coll.toString());
}
}