IOC事例:
文件目录
UserService .java
package com.et.service;
public interface UserService {
public void getUser();
}
UserServiceImpl .java
package com.et.service.impl;
import com.et.dao.UserDao;
import com.et.service.UserService;
public class UserServiceImpl implements UserService{
private UserDao userDao=null;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
UserDao .java
package com.et.dao;
public interface UserDao {
public void getUser();
}
UserDaoMySqlImpl .java
package com.et.dao.impl;
import com.et.dao.UserDao;
public class UserDaoMySqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("mysql获取用户数据");
}
}
UserDaoOracleImpl .java
package com.et.dao.impl;
import com.et.dao.UserDao;
public class UserDaoOracleImpl implements UserDao{
@Override
public void getUser() {
System.out.println("oracle获取用户数据");
}
}
Test.java
package com.et.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.et.service.UserService;
public class Test {
public static void main(String[] args) {
ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
UserService us = (UserService)act.getBean("userService");
us.getUser();
}
}
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 id="mysqlDao" class="com.et.dao.impl.UserDaoMySqlImpl"/>
<bean id="oracleDao" class="com.et.dao.impl.UserDaoOracleImpl"/>
<bean id="userService" class="com.et.service.impl.UserServiceImpl">
<!-- ref引用对象(对象是由spring来创建的) -->
<property name="userDao" ref="mysqlDao"></property>
</bean>
</beans>
输出结果:
mysql获取用户数据
当我们需要改为”oracle获取用户数据”的时候,我们的程序不需要改变,只需要改配置文件(我们只需要把bean中改成),扩展性,和解耦性提高。
输出结果:
oracle获取用户数据
注意:
中的name,中userDao是与UserServiceImpl .java中setUserDao方法中的UserDao名字保持一致,且将首字母变成小写。并不是与private String userDao中的userDao保持一致,因为spring是通过set方法将值注入进去的,所以要与set方法名字保持一致。