2、IOC
2.1、IOC依赖注入
-
UserDao 接口
public interface UserDao {
public void getUser();
} -
UserDaoImpl 实现类
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("默认获取用户");
}
} -
UserService 业务层接口
public interface UserService {
public void getUser();
} -
UserServiceImpl 接口实现
public class UserServiceImpl implements UserService{
private UserDao userDao=new MySqlImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
这样是我们以前正常的写法,这样的写法有一个弊端,就是在service 实现的时候用户的创建是写死的如果Dao层也有多个实现类的话,这样我们在创建的时候,就会有很大的局限性,比如
在这个Dao接口有多个实现,我们在执行方法的时候需要修改创建对象的代码
而我们可以在ServiceImpl中采用一个set方法,来实现对不同用户的执行
public class UserServiceImpl implements UserService{
private UserDao userDao=null;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
这样,我们只需要在测试类中加上一个
public class Test {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaoImpl());
userService.getUser();
}
}
就可以实现不同实现的调用,两种方法,都是做了一样的事情,但是本质上的区别,第一种实例化对象是由系统决定的,而第二种,利用了传递参数的形式来实例化对象,这这种创建对象的方式是由使用程序的人来决定创建那个对象,这就是控制反转。通过这个简单的set方法将程序主动创建对象,转变为程序被动创建对象
控制反转的引入,大大降低了程序的耦合性
2.2、IOC本质
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。
2.3、IOC容器
2.4、HelloSpring
首先建一个类
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
接下来,在resource下创建一个Beans.xml文件
然后去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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- 这个bean的合作者和配置在这里 -->
</bean>
<bean id="..." class="...">
<!-- c这个bean的合作者和配置在这里 -->
</bean>
<!-- 更多bean 定义在这里 -->
</beans>
我们在这里采用Bean标签,来实现类的托管 在配置文件中配置好类的Bean 之后
我们只需要在测试类里面去拿到容器
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//这个方法,可以传递多个参数,来读取多个配置文件
测试类
public class MyTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans.xml");
HelloSpring hello = (HelloSpring) applicationContext.getBean("Hello");
System.out.println(hello.getStr());
}
}
这里要注意、Spring最新版本6.xx版本,对JavaJdk的要求是最低是17,如果使用Java8版本就会出现错误,如果jdk是8版本的可以使用spring5以下的版本
标签:userDao,String,void,getUser,str,IOC,public From: https://www.cnblogs.com/AnJiaYu/p/17659921.html