1. Bean的依赖注入概念
依赖注入(Dependency Injection):它是 Spring 框架外围 IOC 的具体实现。在编写程序时,通过管制反转,把对象的创立交给了 Spring,然而代码中不可能呈现没有依赖的状况。IOC 解耦只是升高他们的依赖关系,但不会打消。例如:业务层仍会调用长久层的办法。那这种业务层和长久层的依赖关系,在应用 Spring 之后,就让 Spring 来保护了。简略的说,就是坐等框架把长久层对象传入业务层,而不必咱们本人去获取。
2. Bean的依赖注入形式
(1)set办法
在UserServiceImpl中增加setUserDao办法
public class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void save() { userDao.save(); }}
<bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"/><bean id="userService" class="com.wange.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property></bean>
(2)构造方法
创立有参结构
public class UserServiceImpl implements UserService { @Override public void save() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); }}
<bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"/><bean id="userService" class="com.wange.service.impl.UserServiceImpl"> <constructor-arg name="userDao" ref="userDao"></constructor-arg></bean>
3. Bean的依赖注入的数据类型
注入数据的三种数据类型
一般数据类型
援用数据类型
汇合数据类型
Bean的依赖注入的数据类型
(1)一般数据类型的注入
package com.wange.dao.impl;import com.wange.dao.UserDao;public class UserDaoImpl implements UserDao{ private String username; private int age; public void setUsername(String username) { this.username = username; } public void setAge(int age) { this.age = age; } public void save() { System.out.println(username+"----"+age); System.out.println("save办法正在执行"); }}
<bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"> <property name="username" value="lisi"></property> <property name="age" value="20"></property></bean>
package com.wange.test;import com.wange.dao.UserDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;//测试public class UserController { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); }}
(2)汇合数据类型(List)String 的注入
package com.wange.dao.impl;import com.wange.dao.UserDao;import com.wange.domain.User;import java.util.List;public class UserDaoImpl implements UserDao{ private List<String> stringList; public void setStringList(List<String> stringList) { this.stringList = stringList; } public void save() { System.out.println(stringList); System.out.println("save办法正在执行"); }}
<bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"> <property name="stringList"> <list> <value>str1</value> <value>str2</value> <value>str3</value> </list> </property></bean>
(3)汇合数据类型(List)User 的注入
package com.wange.dao.impl;import com.wange.dao.UserDao;import com.wange.domain.User;import java.util.List;public class UserDaoImpl implements UserDao { private List<User> userList; public void setUserList(List<User> userList) { this.userList = userList; }public void save() { System.out.println(userList); System.out.println("save办法正在执行"); }}
<bean id="user1" class="com.wange.domain.User"/><bean id="user2" class="com.wange.domain.User"/><bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"> <property name="userList"> <list> <bean class="com.wange.domain.User"/> <bean class="com.wange.domain.User"/> <ref bean="user1"/> <ref bean="user2"/> </list> </property></bean>
4)汇合数据类型( Map<String,User> )的注入
package com.wange.dao.impl;import com.wange.dao.UserDao;import com.wange.domain.User;import java.util.List;import java.util.Map;import java.util.Properties;public class UserDaoImpl implements UserDao{ private Map<String, User> userMap; public void setUserMap(Map<String, User> userMap) { this.userMap = userMap; } public void save() { System.out.println(userMap); System.out.println("save办法正在执行"); }}
<bean id="user1" class="com.wange.domain.User"/><bean id="user2" class="com.wange.domain.User"/><bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"> <property name="userMap"> <map> <entry key="u1" value-ref="user1"/> <entry key="u2" value-ref="user2"/> </map> </property></bean>
(5)汇合数据类型(Properties)的注入
package com.wange.dao.impl;import com.wange.dao.UserDao;import java.util.Properties;public class UserDaoImpl implements UserDao{ private Properties properties; public void setProperties(Properties properties) { this.properties = properties; } public void save() { System.out.println(properties); System.out.println("save办法正在执行"); }}
<bean id="userDao" class="com.wange.dao.impl.UserDaoImpl"> <property name="properties"> <props> <prop key="p1">properties1</prop> <prop key="p2">properties2</prop> <prop key="p3">properties3</prop> </props> </property> </bean>
package com.wange.test;import com.wange.dao.UserDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;//测试public class UserController { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save(); }}
运行后果
最初
大家看完有什么不懂的能够在下方留言探讨,也能够关注我私信问我,我看到后都会答复的。也欢送大家关注我的公众号:前程有光,马上金九银十跳槽面试季,整顿了1000多道将近500多页pdf文档的Java面试题材料放在外面,助你圆梦BAT!文章都会在外面更新,整顿的材料也会放在外面。谢谢你的观看,感觉文章对你有帮忙的话记得关注我点个赞反对一下!