二.Spring4学习-----了解IOC (控制反转)
来源:互联网 发布:linux改变用户权限 编辑:程序博客网 时间:2024/06/07 02:33
一.新建Java项目spring4_ioc1
1.新建Dao层
public interface UserDao {public void getUser();}
2.新建Dao层的实现层
UserDaoMysqlImpl.java
public class UserDaoMySqlImpl implements UserDao{@Overridepublic void getUser() {System.out.println("mysql获取用户数据");}}UserDaoOracleImpl.java
public class UserDaoOracleImpl implements UserDao{@Overridepublic void getUser() {System.out.println("oracle获取用户数据");}}
3.service层
public interface UserService {public void getUser();}
4.service实现层
(一)传统的方式
public class UserServiceImpl implements UserService{//此处需要使用Mysql就使用Mysql,需要Oracle就使用Oracleprivate UserDao userDaoMySqlImpl=new UserDaoMySqlImpl();@Overridepublic void getUser() {userDaoMySqlImpl.getUser();}}
(二)将Dao层抽取出来的方式,需要什么就注入什么Dao
public class UserServiceImpl implements UserService{private UserDao userDao=null;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}}
5.测试
(一)对传统方式的测试
public class Test {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();userService.getUser();}}
测试结果:mysql获取用户数据
(二)对Service注入不同的Dao的方式
public class Test {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();userService.setUserDao(new UserDaoMySqlImpl());userService.getUser();System.out.println("---------------");userService.setUserDao(new UserDaoOracleImpl());userService.getUser();}}测试结果:
mysql获取用户数据
---------------
oracle获取用户数据
6.结果对比第二种相对第一种
a.对象由原来程序本身创建,变为了程序接收对象。
b.程序员主要精力集中于业务实现
c.实现了service和dao的解耦工作。Service和dao实现了分离。没有直接依赖关系。
d.如果dao的实现发生改变,应用程序本身不用改变。
第二种的思想便是控制反转的思想。下面我面来写第一个HelloSring
二.HelloSpring
1.新建spring4_hello
1)导入jar包
commons-logging-1.1.1.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-orm-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
2)编写Hello.java
public class Hello {public Hello() {System.out.println("hello 被创建");}private String name;private boolean sex;public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}public void setName(String name) {this.name = name;}public void show(){System.out.println("hello,"+name);}}
3)编写Spring配置文件
applicationContext.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就是java对象 由spring来创建和管理 --> <!-- id是bean的标识符 要唯一 如果没有配置id,name默认标识符 如果配置id,又配置了name 那么name是别名 name可以设置多个别名 分隔符可以 是 空格 逗号 分号 class是bean的全限定名=包名+类名 如果不配置 id,和name 那么可以根据applicationContext.getBean(Class) 获取对象 --> <bean id="h1" name="hello h2,h3;h4" class="cn.sxt.bean.Hello"> <property name="name" value="张三"/> </bean></beans>
4)编写Test.java
public class Test {public static void main(String[] args) {//1.创建Spring的IOC容器,解析beans.xml文件 生成管理相应的bean对象BeanFactory context = new ClassPathXmlApplicationContext("beans.xml");//Hello hello = (Hello)context.getBean("h4"); //2.从容器中获取Bean Hello hello= context.getBean(Hello.class); //3.调用方法 hello.show();}}测试结果:
hello 被创建
hello,张三
5).思考
a)Hello对象是谁创建的?
Hello对象是Spring容器创建的
Hello hello= context.getBean(Hello.class);
b)Hello对象属性是怎么设置的?
Hello对象属性是由spring容器来设置的。
结论:
这个过程就叫做控制反转。
控制的内容:指谁来控制对象的创建:传统的应用程序对象的创建由程序本身控制的。使用spring后,是由spring来创建对象的。
反转:正传指程序来创建对象。反转指程序本身不去创建对象,而变为被动接受的对象。
总结:以前对象是由程序本身来创建,使用spring后,程序变为被动接收spring创建好的对象。
控制反转------依赖注入(dependency injection):通过Set方法注入的
IOC是一种·编程思想:由主动编程,变成被动接收
下一讲将详细讲解Spring框架IOC
- 二.Spring4学习-----了解IOC (控制反转)
- 三.Spring4学习-----IOC (控制反转)创建对象的三种方式
- Spring基础学习二 : IOC控制反转
- Spring IoC(控制反转)【二】
- Spring详解(二)------IOC控制反转
- Spring学习IoC控制反转(一)
- 什么是依赖注入(IoC)、控制反转(DI) (二)
- 二、IoC控制反转(或依赖注入)
- 【spring框架】(二)控制反转(IOC)容器
- Spring(二)入门案例IOC(控制反转)
- Kotlin的Spring之旅(二):IOC控制反转
- Spring IoC(控制反转)
- Spring IoC(控制反转)
- IOC基本原理(控制反转 )
- 二、控制反转(inverse of control IOC )
- Spring4学习笔记(二):IOC&DI概述
- Spring学习(6)Spring核心思想 控制反转Ioc
- Spring学习笔记(七):IOC控制反转
- /Linux1又是怨气满满的一天哦
- 单例cocos2dx
- 存储管理的相关介绍
- linux中ext4系统出现索引inode(索引节点)满,提示磁盘空间不足
- 显示星期几的日期js
- 二.Spring4学习-----了解IOC (控制反转)
- Excel2013如何将阶梯分布在不同列的内容靠拢到一列里面
- css实现简单瀑布流以及存在的问题
- Vue 中使用 jQuery
- KeychainItemWrapper 'Couldn't add the Keychain Item.'
- 《剑指offer》刷题笔记(代码完整性):在O(1)时间删除链表结点
- 中国UV打印机市场前景探析
- VSTO Office二次开发对PowerPoint功能简单测试
- 一个方法两次不同的调用设置值一样,只是有一个设置值不一样的处理