目录
可参考:https://baijiahao.baidu.com/s?id=1612405553596190826&wfr=spider&for=pc
* spring的依赖注入
* 注入的方式有三种
* 第一种:使用构造函数注入
* 第二种:使用set方法注入
* 第三种:使用注解注入
* 注入的数据类型有三类:
* 第一类:基本类型和string类型
* 第二类:其他bean类型(必须是在spring的配置文件中出现过的bean)
* 第三类:复杂类型(集合类型)
*
*/
推荐使用set注入。不会更改构造函数,
1.构造依赖注入
<!-- 构造依赖注入 :
涉及的标签 : contrustor-arg
标签的属性:
type:指定参数的类型。
index:指定参数的索引位置从0开始
name:指定参数的名称
+++++++++上面三个参数是指定给哪个参数赋值的,下面两个参数是指定赋什么值的+++++++++++++++++++++++++++++
value:指定基本数据类型或String类型的数据
ref:指定其他bean
类型的数据
标签出现的位置:
写在bean标签的内部
-->
cn.pro.service.CustormerService
package cn.pro.service;
//客户的业务实现接口
public interface CustormerService {
void saveCustormer();
}
cn.pro.service.impl.CustormerServiceimpl
package cn.pro.service.impl;
import java.util.Date;
import cn.pro.service.CustormerService;
//客户的业务层实现层
public class CustormerServiceimpl implements CustormerService{
private String driver;
private Integer port;
private Date today;
//以上三个类成员,没有什么特别的意义,只是为了演示依赖注入
public CustormerServiceimpl(String driver, Integer port, Date today) {
super();
this.driver = driver;
this.port = port;
this.today = today;
}
public void saveCustormer() {
// TODO Auto-generated method stub
System.out.println("业务层调用持久层" + driver + "," + port + "," + today + ".");
//custormerdao.SaveCustormer();
}
}
bean.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 definitions here -->
<!-- <bean id="custormerService" class="cn.pro.service.impl.CustormerServiceimpl"></bean> -->
<!-- 构造依赖注入 :
涉及的标签 : contrustor-arg
标签的属性:
type:指定参数的类型。
index:指定参数的索引位置从0开始
name:指定参数的名称
+++++++++上面三个参数是指定给哪个参数赋值的,下面两个参数是指定赋什么值的+++++++++++++++++++++++++++++
value:指定基本数据类型或String类型的数据
ref:指定其他bean
类型的数据
标签出现的位置:
写在bean标签的内部
-->
<bean id="custormerService" class="cn.pro.service.impl.CustormerServiceimpl">
<constructor-arg name="driver" value="com.mysql.jdbc.driver"></constructor-arg>
<constructor-arg name="port" value="3306"></constructor-arg>
<constructor-arg name="today" ref="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>
</beans>
cn.pro.Ui.Client
package cn.pro.Ui;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import cn.pro.service.CustormerService;
public class Client {
/**spring的入门案例
* @param args
* spring的依赖注入
* 注入的方式有三种
* 第一种:使用构造函数注入
* 第二种:使用set方法注入
* 第三种:使用注解注入
* 注入的数据类型有三类:
* 第一类:基本类型和string类型
* 第二类:其他bean类型(必须是在spring的配置文件中出现过的bean)
* 第三类:复杂类型(集合类型)
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.获取容器
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据容器id获取对象
CustormerService cs = (CustormerService) ac.getBean("custormerService");
cs.saveCustormer();
}
}
执行
业务层调用持久层com.mysql.jdbc.driver,3306,Mon Feb 25 15:23:54 CST 2019.
2.使用set方法注入
cn.pro.service.impl.CustormerServiceimpl2
package cn.pro.service.impl;
import java.util.Date;
import cn.pro.service.CustormerService;
//客户的业务层实现层
public class CustormerServiceimpl2 implements CustormerService{
private String driver;
private Integer port;
private Date today;
//以上三个类成员,没有什么特别的意义,只是为了演示依赖注入
public void setDriver(String driver) {
this.driver = driver;
}
public void setPort(Integer port) {
this.port = port;
}
public void setToday(Date today) {
this.today = today;
}
public void saveCustormer() {
// TODO Auto-generated method stub
System.out.println("业务层调用持久层" + driver + "," + port + "," + today + ".");
//custormerdao.SaveCustormer();
}
}
bean.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 definitions here -->
<!-- set方法注入
涉及的标签:property
标签的属性:
name:指定参数的名称
+++++++++上面三个参数是指定给哪个参数赋值的,下面两个参数是指定赋什么值的+++++++++++++++++++++++++++++
value:指定基本数据类型或String类型的数据
ref:指定其他bean
标签出现的位置:
写在bean标签的内部
-->
<bean id="custormerservice2" class="cn.pro.service.impl.CustormerServiceimpl2">
<property name="driver" value="com.mysql.jdbc.driver"></property>
<property name="port" value="3306"></property>
<property name="today" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
</beans>
cn.pro.Ui.Client
package cn.pro.Ui;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import cn.pro.service.CustormerService;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.获取容器
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据容器id获取对象
CustormerService cs = (CustormerService) ac.getBean("custormerservice2");
cs.saveCustormer();
}
}
执行结果
业务层调用持久层com.mysql.jdbc.driver,3306,Mon Feb 25 16:01:37 CST 2019.
3.复杂类型的注入
cn.pro.service.impl.CustormerServiceimpl3
package cn.pro.service.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import cn.pro.service.CustormerService;
//客户的业务层实现层
public class CustormerServiceimpl3 implements CustormerService{
private String Mystr[];
private List<String> Mylist;
private Set<String> Myset;
private Map<String, String> Mymap;
private Properties Myp;
public String[] getMystr() {
return Mystr;
}
public void setMystr(String[] mystr) {
Mystr = mystr;
}
public List<String> getMylist() {
return Mylist;
}
public void setMylist(List<String> mylist) {
Mylist = mylist;
}
public Set<String> getMyset() {
return Myset;
}
public void setMyset(Set<String> myset) {
Myset = myset;
}
public Map<String, String> getMymap() {
return Mymap;
}
public void setMymap(Map<String, String> mymap) {
Mymap = mymap;
}
public Properties getMyp() {
return Myp;
}
public void setMyp(Properties myp) {
Myp = myp;
}
public void saveCustormer() {
//打印数组第一个字符的内存地址
System.out.println(Mystr);
System.out.println(Arrays.toString(Mystr));
System.out.println(Mylist);
System.out.println(Myset);
System.out.println(Mymap);
System.out.println(Myp);
}
}
bean.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 definitions here -->
<!-- set方法注入
涉及的标签:property
标签的属性:
name:指定参数的名称
+++++++++上面三个参数是指定给哪个参数赋值的,下面两个参数是指定赋什么值的+++++++++++++++++++++++++++++
value:指定基本数据类型或String类型的数据
ref:指定其他bean
标签出现的位置:
写在bean标签的内部
-->
<bean id="custormerservice2" class="cn.pro.service.impl.CustormerServiceimpl2">
<property name="driver" value="com.mysql.jdbc.driver"></property>
<property name="port" value="3306"></property>
<property name="today" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
<!-- 复杂类型的注入
结构相同,内容可以互换
-->
<bean id="custormerservice3" class="cn.pro.service.impl.CustormerServiceimpl3">
<property name="Mystr">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<property name="mylist">
<list>
<value>111</value>
<value>222</value>
<value>333</value>
</list>
</property>
<property name="myset">
<set>
<value>aa</value>
<value>bb</value>
<value>cc</value>
<value>dd</value>
</set>
</property>
<property name="mymap">
<map>
<entry key="aa" value="11"></entry>
<entry key="bb" value="22"></entry>
<entry key="cc" value="33"></entry>
</map>
</property>
<property name="myp">
<props>
<prop key="p1">11</prop>
<prop key="p2">12</prop>
</props>
</property>
</bean>
</beans>
cn.pro.Ui.Client
package cn.pro.Ui;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import cn.pro.service.CustormerService;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.获取容器
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据容器id获取对象
CustormerService cs = (CustormerService) ac.getBean("custormerservice3");
cs.saveCustormer();
}
}
运行:
[Ljava.lang.String;@18ce14a
[AAA, BBB, CCC]
[111, 222, 333]
[aa, bb, cc, dd]
{aa=11, bb=22, cc=33}
{p2=12, p1=11}