依赖注入
Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系。依赖注入使用Spring框架创建对象时动态地将其所依赖的对象注入Bean中,一般常见的依赖注入方式有构造方法注入和setter方法注入。
基于构造方法的依赖注入
创建Spring工程
创建dao
UserDao
接口代码
public interface UserDao {
public void selectUser();
}
UserDaoImpl
实现类代码
public class UserDaoImpl implements UserDao{
@Override
public void selectUser() {
System.out.println("UserDaoImpl -> selectUser");
}
}
创建Service
UserService
接口代码
public interface UserService {
public void selectUser();
}
UserServiceImpl
实现类代码
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void selectUser() {
userDao.selectUser();
System.out.println("UserServiceImpl -> selectUser");
}
}
Spring配置文件
<?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="userDao" class="com.lucas.dao.UserDaoImpl"/>
<!-- 构造方法注入-->
<bean id="userService" class="com.lucas.service.UserServiceImpl">
<constructor-arg index="0" ref="userDao"/>
</bean>
</beans>
添加测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.selectUser();
}
}
执行结果:
工程目录结构
基本类型注入
创建UserBean
public class UserBean {
private int age;
private String name;
public UserBean(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "UserBean{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
Spring配置文件
<?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="userDao" class="com.lucas.dao.UserDaoImpl"/>
<bean id="userBean" class="com.lucas.UserBean">
<constructor-arg index="0" value="20"/>
<constructor-arg index="1" value="张三"/>
</bean>
</beans>
测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserBean userBean = (UserBean) applicationContext.getBean("userBean");
System.out.println(userBean);
}
}
基于setter方法的依赖注入
前面的步骤同基于构造方法的依赖注入
只需修改UserServiceImpl
,给该类增加一个set方法
public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void selectUser() {
userDao.selectUser();
System.out.println("UserServiceImpl -> selectUser");
}
}
修改spring配置文件
<?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="userDao" class="com.lucas.dao.UserDaoImpl"/>
<!-- set方法注入-->
<bean id="userService" class="com.lucas.service.UserServiceImpl">
<!-- <constructor-arg index="0" ref="userDao"/>-->
<property name="userDao" ref="userDao"/>
</bean>
</beans>
运行结果:
数组和集合注入
创建UserBean
public class UserBean {
private ArrayList<String> names;
private String[] names1;
public ArrayList<String> getNames() {
return names;
}
public void setNames(ArrayList<String> names) {
this.names = names;
}
public String[] getNames1() {
return names1;
}
public void setNames1(String[] names1) {
this.names1 = names1;
}
@Override
public String toString() {
return "UserBean{" +
"names=" + names +
", names1=" + Arrays.toString(names1) +
'}';
}
}
Spring配置文件
<?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="userBean" class="com.lucas.UserBean">
<property name="names">
<list>
<value >张三</value>
<value >李四</value>
<value >王五</value>
</list>
</property>
<property name="names1">
<!--list或array都可以-->
<list>
<value >张三1</value>
<value >李四1</value>
<value >王五1</value>
</list>
</property>
</bean>
</beans>
测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserBean userBean = (UserBean) applicationContext.getBean("userBean");
System.out.println(userBean);
}
}
执行结果:
Map注入
创建UserBean
public class UserBean {
private Map<String ,String> map;
public UserBean(){
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public UserBean(Map<String, String> map) {
this.map = map;
}
@Override
public String toString() {
return "UserBean{" +
"map=" + map +
'}';
}
}
Spring配置文件
<?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="userBean" class="com.lucas.UserBean">
<property name="map">
<map>
<entry key="key1" value="value1"/>
<entry key="key2" value="value2"/>
<entry key="key3" value="value3"/>
</map>
</property>
</bean>
</beans>
测试代码
public class App {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserBean userBean = (UserBean) applicationContext.getBean("userBean");
System.out.println(userBean);
}
}