spring 5.1.5版本(二)
阿新 • • 發佈:2019-03-27
物件建立方式
方式一
applicationContext.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"> <!--建立方式一--> <bean name="user" class="com.company.bean.User"></bean> </beans>
Demo
//建立方式一:空參構造方式
static void func1() {
//建立容器物件
ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
//從容器取user物件
User user = (User) ac.getBean("user");
System.out.println(user);
}
方式二
applicationContext.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"> <!--建立方式二--> <bean name="user2" class="com.company.create.UserFactory" factory-method="createUser"></bean> </beans>
UserFactory
package com.company.create;
import com.company.bean.User;
public class UserFactory {
public static User createUser() {
System.out.println("靜態工廠建立User");
return new User();
}
}
Demo
//建立方式二:靜態工廠(瞭解)
static void func2() {
//建立容器物件
ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
//從容器取user物件
User user = (User) ac.getBean("user2");
System.out.println(user);
}
方式三
applicationContext.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">
<!--建立方式三-->
<bean name="userFactory" class="com.company.create.UserFactory" ></bean>
<bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>
</beans>
UserFactory
package com.company.create;
import com.company.bean.User;
public class UserFactory {
public User createUser2() {
System.out.println("例項工廠建立User");
return new User();
}
}
Demo
//建立方式三:例項工廠(瞭解)
static void func3() {
//建立容器物件
ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/create/applicationContext.xml");
//從容器取user物件
User user = (User) ac.getBean("user3");
System.out.println(user);
}
scope屬性
singleton :預設值,單例物件,被標識為單例的物件在spring容器中只會存在一個例項
prototype :多例原型,被標識為多例的物件,每次再獲得才會建立,每次建立都是新的物件。整合struts2時,ActionBean必須配置為多例
生命週期方法
<!-- init-method: 配置一個方法作為生命週期的初始化方法
destroy-method: 配置一個方法作為生命週期的銷燬方法 -->
<bean name="user" class="com.company.bean.User" scope="singleton" init-method="init" destroy-method="destory"></bean>
package com.company.bean;
public class User {
private String name;
private Integer age;
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 void init() {
}
public void destory(){
}
}
分模組配置
<import resource="com/company/create/applicationContext.xml"></import>
屬性注入
方式一:set方法注入
Car
package com.company.bean;
public class Car {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
User
package com.company.bean;
public class User {
private String name;
private Integer age;
private Car car;
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 void init() {
System.out.println("");
}
public void destory() {
System.out.println("");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}
applicationContext.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">
<!--set方式注入-->
<bean name="user" class="com.company.bean.User">
<!-- 值型別注入:為User物件中名為name的屬性注入tom作為值-->
<property name="name" value="tom"></property>
<property name="age" value="20"></property>
<!--引用型別注入-->
<property name="car" ref="car"></property>
</bean>
<!--將Car物件配置到容器中-->
<bean name="car" class="com.company.bean.Car">
<property name="name" value="蘭博基尼"></property>
<property name="color" value="黃色"></property>
</bean>
</beans>
Demo
static void func1() {
ApplicationContext ac = new ClassPathXmlApplicationContext("com/company/zhuru/applicationContext.xml");
User user = (User) ac.getBean("user");
System.out.println(user.toString());
}
方式二:建構函式注入
User 中加入建構函式
package com.company.bean;
public class User {
private String name;
private Integer age;
private Car car;
public User(String name, Integer age, Car car) {
this.name = name;
this.age = age;
this.car = car;
}
public User() {
}
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 void init() {
System.out.println("");
}
public void destory() {
System.out.println("");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}
applicationContext.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">
<!--建構函式注入-->
<bean name="user2" class="com.company.bean.User">
<!-- name: 建構函式的引數名
index: 建構函式的引數索引
type: 建構函式的引數型別
-->
<constructor-arg name="name" value="zhangsan" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>
</beans>
方式三:p名稱空間注入
applicationContext.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">
<!-- p名稱空間注入
匯入p名稱空間 xmlns:p="http://www.springframework.org/schema/p"
-->
<bean name="user3" class="com.company.bean.User" p:name="jack" p:age="20" p:car-ref="car"></bean>
</beans>
方式四:spel注入
applicationContext.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">
<!--set方式注入-->
<bean name="user" class="com.company.bean.User">
<!-- 值型別注入:為User物件中名為name的屬性注入tom作為值-->
<property name="name" value="tom"></property>
<property name="age" value="20"></property>
<!--引用型別注入-->
<property name="car" ref="car"></property>
</bean>
<!--將Car物件配置到容器中-->
<bean name="car" class="com.company.bean.Car">
<property name="name" value="蘭博基尼"></property>
<property name="color" value="黃色"></property>
</bean>
<!-- spel注入-->
<bean name="user4" class="com.company.bean.User">
<!-- 將user的name和age的值賦值給user4 -->
<property name="name" value="#{user.name}"></property>
<property name="age" value="#{user.age}"></property>
<property name="car" ref="car"></property>
</bean>
</beans>
複雜型別注入(陣列、List、Map、Properties)
<?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" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<!--複雜型別注入-->
<!--陣列-->
<bean name="CollectionBean" class="com.company.zhuru.CollectionBean">
<!--陣列中只有一個值-->
<!--<property name="arr" value="tom"></property>-->
<!--陣列中有多個值-->
<property name="arr">
<array>
<value>tom</value>
<value>zhangsan</value>
<ref bean="user4"></ref>
</array>
</property>
<!--list中只有一個值-->
<!--<property name="list" value="tom"></property>-->
<!--list中有多個值-->
<property name="list">
<list>
<value>tom</value>
<value>zhangsan</value>
<ref bean="user4"></ref>
</list>
</property>
<!--map-->
<property name="map">
<map>
<entry key="url" value="www.baidu.com"></entry>
<entry key="user" value-ref="user4"></entry>
<entry key-ref="user3" value-ref="user2"></entry>
</map>
</property>
<!--properties-->
<property name="properties">
<props>
<prop key="class">com.company.zhuru.Demo</prop>
<prop key="username">zhangsan</prop>
</props>
</property>
</bean>
&l