spring中ioc的简单实现,主要实现类代码附上!
-
IOC
ioc(inversion of control)是一种思想而不是一种技术,还有一个别名叫做依赖注入(dependency injection),其实这两种都是对同一种思想的解释,主要区别是解释的角度不同。 -
控制反转:
控制:是谁控制对象的创建,是容器控制对象的创建。传统的对象是由应用程序创建的,现在是由容器控制对象的创建。
反转:正转:应用程序创建对象。现在改为应用程序接收对象,又容器创建对象然后应用程序接收。 -
依赖注入:
依赖:应用程序依赖容器。
注入:容器向应用程序注入(对象,资源,常量数据) -
UserDao类
package cn.aly.dao;
public interface UserDao {
public void getUser();
}
- UserMysqlDaoImpl类
package cn.aly.dao.impl;
import cn.aly.dao.UserDao;
public class UserMysqlDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("sqlserver的实现");
}
}
- UserSqlServerDaoImpl类
```java
package cn.aly.dao.impl;
import cn.aly.dao.UserDao;
public class UserSqlServerDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("SqlServe的实现");
}
}
- UserServiceImpl类
package cn.aly.service;
import cn.aly.dao.UserDao;
public class UserServiceImpl {
private UserDao userDao=null;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
this.userDao.getUser();
}
}
- 测试类
package cn.aly.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.aly.dao.UserDao;
import cn.aly.service.UserServiceImpl;
public class Test {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl userDao=(UserServiceImpl) ac.getBean("service");
userDao.getUser();
}
}
- 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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- bean就是java对象,由spring来出创建和管理 -->
<bean id="mysqlDao" class="cn.aly.dao.impl.UserMysqlDaoImpl"></bean>
<bean id="sqlserverDao" class="cn.aly.dao.impl.UserSqlServerDaoImpl"></bean>
<bean id="service" class="cn.aly.service.UserServiceImpl">
<!-- 这里的name是set方法后面的那个单词,然后首字母改为小写 -->
<!-- 这里不能用 value 这个是值,要引用对象的话需要用ref -->
<property name="userDao" ref="sqlserverDao"></property>
</bean>
</beans>