容器创建对象的三种方式
通过类的无参构造创建对象
通过静态工厂的方式创建对象
通过实例工厂来创建对象,此方法首先要把工厂配置到容器中
<?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">
<!-- 把人和猫配置到容器中 -->
<!-- spring容器管理对象的声明周期:创建、使用(依赖的配置)、销毁 -->
<!-- 通过类的无参构造创建对象 -->
<bean id="people" class="com.test.bean.People"></bean>
<bean id="cat" class="com.test.bean.Cat"></bean>
<!-- 通过静态工厂的方式创建对象 -->
<bean id="ming" class="com.test.factory.PeopleFactory" factory-method="creatPeople"></bean>
<!-- 通过实例工厂来创建对象,此方法首先要把工厂配置到容器中 -->
<bean id="insFactory" class="com.test.factory.InstanceFactory"></bean>
<bean id="Tom" class="com.test.bean.People" factory-bean="insFactory" factory-method="getPeople"></bean>
</beans>
依赖注入的方式
1:set注入
2:构造注入
<?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">
<!-- 依赖注入的方式:1:set注入 2:构造注入 知识点:简化配置 知识点:自动注入 -->
<!-- 1:set注入 -->
<bean id="person" class="com.test.bean.Person">
<property name="name" value="小蓝"></property>
<property name="dog" ref="dog"></property>
<property name="movies">
<set value-type="java.lang.String">
<value>日韩</value>
<value>中文</value>
</set>
</property>
<property name="size">
<map>
<entry key="身高" value="175"></entry>
<entry key="体重" value="105"></entry>
</map>
</property>
<property name="prop">
<props>
<prop key="演员">一个电影</prop>
<prop key="歌手">一首歌</prop>
</props>
</property>
</bean>
<bean id="dog" class="com.test.bean.Dog">
<property name="dname" value="哈士奇"></property>
<property name="color" value="黑色"></property>
</bean>
<!-- 2:构造注入,采取构造方法来完成依赖的注入 -->
<bean id="personCons" class="com.test.bean.Person">
<constructor-arg name="dog" ref="chai"></constructor-arg>
<constructor-arg name="hobby">
<list value-type="java.lang.String">
<value>拍电影</value>
<value>看球赛</value>
</list>
</constructor-arg>
</bean>
<bean id="chai" class="com.test.bean.Dog">
<constructor-arg name="color" value="黄色"></constructor-arg>
<constructor-arg name="dname" value="柴犬"></constructor-arg>
</bean>
</beans>
简化配置
自动注入
<?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:c="http://www.springframework.org/schema/c"
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-4.3.xsd">
<!-- 简化set注入、构造注入、特殊结构(数组、集合)注入,提供了三个命名空间p: c: util: -->
<bean id="ji" class="com.test.bean.Dog" p:dname="吉娃娃" p:color="白色"></bean>
<bean id="personJH" class="com.test.bean.Person" c:dog-ref="ji" c:hobby-ref="qiu"></bean>
<util:list value-type="java.lang.String" id="qiu">
<value>看球</value>
<value>打球</value>
<value>踢球</value>
</util:list>
<!-- 依赖注入的自动注入,特指引用类型 -->
<!-- byName:按照成员变量名和指定类型的bean的id值对应来注入 -->
<!-- byType:按照成员变量类型和指定类型的bean的类型对应来注入,要唯一 -->
<bean id="jack" class="com.test.bean.People" autowire="byName">
<property name="bname" value="jack"></property>
<property name="age" value="30"></property>
</bean>
<bean id="mimi" class="com.test.bean.Cat">
<constructor-arg name="cname" value="小猫猫"></constructor-arg>
<constructor-arg name="color" value="粉色"></constructor-arg>
</bean>
<bean id="cat" class="com.test.bean.Cat">
<constructor-arg name="cname" value="小miaomiao"></constructor-arg>
<constructor-arg name="color" value="灰色"></constructor-arg>
</bean>
<alias name="cat" alias="ccc"/>
</beans>
数据库连接池
<?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 id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=Hongkong"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
</bean>
</beans>
附:
package com.test.bean;
public class Cat {
private String cname;
private String color;
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Cat() {
// TODO Auto-generated constructor stub
}
public Cat(String cname, String color) {
super();
this.cname = cname;
this.color = color;
}
@Override
public String toString() {
return "Cat [cname=" + cname + ", color=" + color + "]";
}
}
package com.test.bean;
public class Dog {
private String dname;
private String color;
public Dog() {
super();
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Dog(String dname, String color) {
super();
this.dname = dname;
this.color = color;
}
@Override
public String toString() {
return "Dog [dname=" + dname + ", color=" + color + "]";
}
}
package com.test.bean;
/**
* Spring框架可以管理 任何层次的java对象, 一般用它管理 三层(web层/业务层/持久层)架构里的对象,
* 我们学习基础配置阶段 使用 普通的封装类来做例子, 整合时 回归三层配置.
* @author Administrator
*
*/
public class People {
private String bname;
private Integer age;
private Cat cat; //人类型 关联 猫类型 这里叫做依赖!
public People() {
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public People(String bname, Integer age) {
super();
this.bname = bname;
this.age = age;
}
public People(String bname, Integer age, Cat cat) {
super();
this.bname = bname;
this.age = age;
this.cat = cat;
}
@Override
public String toString() {
return "People [bname=" + bname + ", age=" + age + ", cat=" + cat + "]";
}
}
package com.test.bean;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Person {
private String name;
private Integer age;
private Dog dog;
private String[] srr;
private List<String> hobby;
private Set<String> movies;
private Map<String,Integer> size;
private Properties prop;//kv都是String
public Person() {
super();
}
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 Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public String[] getSrr() {
return srr;
}
public void setSrr(String[] srr) {
this.srr = srr;
}
public List<String> getHobby() {
return hobby;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
public Set<String> getMovies() {
return movies;
}
public void setMovies(Set<String> movies) {
this.movies = movies;
}
public Map<String, Integer> getSize() {
return size;
}
public void setSize(Map<String, Integer> size) {
this.size = size;
}
public Properties getProp() {
return prop;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public Person(String name, Integer age, Dog dog) {
super();
this.name = name;
this.age = age;
this.dog = dog;
}
public Person(Dog dog, List<String> hobby) {
super();
this.dog = dog;
this.hobby = hobby;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", dog=" + dog + ", srr=" + Arrays.toString(srr) + ", hobby="
+ hobby + ", movies=" + movies + ", size=" + size + ", prop=" + prop + "]";
}
}
package com.test.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.bean.People;
public class SpringTest {
@Test
public void test1() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("SpringConfig.xml");
People p = ac.getBean("people", People.class);
System.out.println(p);
}
}
package com.test.factory;
import com.test.bean.People;
public class InstanceFactory {
public People getPeople() {
People b = new People("Tom",25);
return b;
}
}
package com.test.factory;
import com.test.bean.People;
public class PeopleFactory {
public static People creatPeople() {
People b = new People();
b.setBname("小明");
return b;
}
}