DI依赖注入也有两种方式,即配置文件注入和注解注入java
属性须知:mysql
前期代码准备:spring
//Dao.Class文件 public class Dao { private String testDI; public Dao(String testDI){ this.testDI=testDI; } } //Service.Class文件 public class Service { private Dao dao; private String test; private Map<String,String> map; private Properties properties; public void setProperties(Properties properties) { this.properties = properties; } public void setMap(Map<String, String> map) { this.map = map; } public void setDao(Dao dao) { this.dao = dao; } public void setDao(Dao dao) { this.dao = dao; } private String[] args; private List<String> list; public void setArgs(String[] args) { this.args = args; } public void setList(List<String> list) { this.list = list; } }
applicationContext.xml配置文件sql
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>
配置文件注入又分三种 :数组
使用有参构造注入(以Dao类为例)app
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dao" class="com.testWeb.dao.impl.Dao"> <constructor-arg name="testDI" value="测试DI"></constructor-arg> </bean> </beans>
使用set方法注入(以Service类为例,注意:set方法注入为经常使用方法,且注入对象也较为重要,请紧紧掌握)函数
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dao" class="com.testWeb.dao.impl.Dao"> <constructor-arg name="testDI" value="测试DI"></constructor-arg> </bean> <bean id="service" class="com.testWeb.service.Service"> <property name="dao" ref="dao"></property> </bean> </beans>
P名称空间注入测试
<?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:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="dao" class="com.testWeb.dao.impl.Dao"> <constructor-arg name="testDI" value="测试DI"></constructor-arg> </bean> <bean id="service" class="com.testWeb.service.Service" p:dao-ref="dao" p:test="测试"></bean> </beans>
4.复杂属性的注入this
这里复杂属性的注入其实属于set注入,但因为代码量缘由,就另起一点了。code
<?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:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- id:用于SpringIOC调用,能够为任意 class:类的全路径 --> <bean id="user" class="com.testWeb.daomain.User"></bean> <!--开启注解扫描--> <context:component-scan base-package="com.testWeb"></context:component-scan> <bean id="dao" class="com.testWeb.dao.impl.Dao"> <constructor-arg name="testDI" value="测试DI"></constructor-arg> </bean> <bean id="service" class="com.testWeb.service.Service" p:dao-ref="dao" p:test="测试"> <!--数组--> <property name="args"> <list> <value>测试1</value> <value>测试2</value> <value>测试3</value> </list> </property> <!-- List--> <property name="list"> <list> <value>测试1</value> <value>测试2</value> <value>测试3</value> </list> </property> <!--Map--> <property name="map"> <map> <entry key="name" value="LiMing"></entry> <entry key="class" value="Class1"></entry> <entry key="hoby" value="PingPang"></entry> </map> </property> <!--properties--> <property name="properties"> <props> <prop key="driverclass">com.mysql.jdbc.Driver</prop> </props> </property> </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:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.testWeb"></context:component-scan> </beans>
第二步、利用注解建立对象并注入属性
//Dao.class文件 @Service(value = "dao") public class Dao { public void test(){ System.out.println("test"); } } //Service.class文件 @Service(value = "service") public class Service { //获得dao对象 //在dao属性上利用注解直接注入,使用注解不用set方法 @Autowired //自动装配 private Dao dao; //name中注解建立对象的Value值 @Resource(name="dao") private Dao dao1; }