Java|Java 中的控制反转(IOC)详解
目录
- IOC理论推导
- Spring管理对象
- Spring管理对象的简单例子
- Bean无参构造类创建和有参构造类创建
- Spring的一些配置
- 别名
- Bean的配置
- import
- 总结
IOC理论推导
文章图片
文章图片
Dao层1.UserDao 接口
2.UserDaoImpl 实现类
Service层3.UserService 业务接口
4.UserServiceImpl 业务实现类
用户实际调用service层 不会动dao层!
Dao层接口创建
package com.ckm.dao; public interface UserDao {void getUser(); }
Dao层实现类1创建
package com.ckm.dao; public class UserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("获取了User数据"); }}
Dao层实现类2创建
package com.ckm.dao; public class UserDaoMysqlImpl implements UserDao{@Overridepublic void getUser() {System.out.println("mysql使用了数据"); }}
Service层接口创建
package com.ckm.service; public interface UserService {void getUser(); }
Service层接口实现类创建
package com.ckm.service; import com.ckm.dao.UserDao; import com.ckm.dao.UserDaoImpl; public class UserServiceImpl implements UserService{//private UserDao userDao = new UserDaoImpl(); //利用set进行动态实现值的注入private UserDao userDao; public void setUserDao(UserDao userDao){this.userDao = userDao; }@Overridepublic void getUser() {userDao.getUser(); }}
单元测试
import com.ckm.dao.UserDaoImpl; import com.ckm.dao.UserDaoMysqlImpl; import com.ckm.service.UserServiceImpl; public class TestIOC {public static void main(String[] args) {//用户实际调用service层 不会动dao层!UserServiceImpl userService = new UserServiceImpl(); userService.setUserDao(new UserDaoMysqlImpl()); userService.getUser(); }}
文章图片
【Java|Java 中的控制反转(IOC)详解】
Spring管理对象 resources中新建beans.xml文件
dao层、Service层代码不变
测试类
import com.ckm.service.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIOC {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl"); userServiceImpl.getUser(); }}
文章图片
Spring管理对象的简单例子 User类
package com.ckm.pojo; public class Hello {private String str; public String getStr() {return str; }public void setStr(String str) {this.str = str; }@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}'; }}
beans.xml
package com.ckm.pojo; public class Hello {private String str; public String getStr() {return str; }public void setStr(String str) {this.str = str; }@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}'; }}
测试类
import com.ckm.pojo.Hello; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest {public static void main(String[] args) {//获取spring的上下文对象//xml加载必须new ClassPathXmlApplicationContext()ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); //我们的对象现在都在spring中管理,我们要使用,直接去里面取出来Hello hello = (Hello) context.getBean("hello"); System.out.println(hello.getStr()); }}
文章图片
Bean无参构造类创建和有参构造类创建 当getBean的时候,这个类就已经被实例化了,就会执行无参构造方法
有参构造的User类
package com.ckm.pojo; public class User {private String name; //public User() {//System.out.println("无参构造"); //}public User(String name){this.name = name; }public String getName() {return name; }public void setName(String name) {this.name = name; }public void show(){System.out.println("name="+name); }}
编写Beans.xml
Spring的一些配置
别名
Bean的配置
import
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更对内容!
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 事件代理
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- Java|Java OpenCV图像处理之SIFT角点检测详解