Spring系列第2篇:IOC的概念和Spring中的IOC

一、程序的耦合及解耦

1.曾经案例中的问题

代码如下:

/**
 * 程序的耦合
 */
public class JDBCUtil {
    public static void main(String[] args) throws SQLException {
        //1.注册驱动
        //DriverManager.deregisterDriver(new com.mysql.jdbc.Driver());
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
        //3.获取操作数据库的预处理对象
        PreparedStatement preparedStatement = con.prepareStatement("select * from account ");
        //4.执行sql语句,得到结果集
        ResultSet resultSet = preparedStatement.executeQuery();
        //5.封装结果集或遍历结果集
        while (resultSet.next()){
            System.out.println(resultSet.getString("name"));
        }
        //6.释放资源
        resultSet.close();
        preparedStatement.close();
        con.close();
    }
}

耦合:程序间的依赖
包括:
类之间的依赖
方法之间的依赖
解耦:降低程序之间的依赖关系
实际开发中:尽量做到编译期间不依赖,运行期依赖。
解决思路:
1.使用反射来创建对象,避免使用new来创建对象
2.通过读取配置文件来获取要创建对象的全限定类名。(配置:xml和properties)

2.工厂模式解耦

Bean:在计算机英语中是可重用性组件的含义
可重用组件:例如(手机有处理器,屏幕,电话卡)dao、service在项目中重复使用等
Javabean:用Java语言编写的可重用性组件
Javabean不等于(大于)实体类
思路:一个创建bean对象的工厂类
作用:创建service和dao对象的
创建Bean对象工厂步骤:

1.创建一个配置文件properties来配置service和dao

配置内容 :唯一标识=全限定类名(key=vlaue)

2.通过读取配置文件的内容反射创建bean对象

配置文件可以是properties和xml


/**
 * 工厂模式解耦
 *
 * 创建bean对象的工厂
 */
public class BeanFactory {

    //定义一个properties
    private static Properties properties;
    //定义一个容器用来存放对象
    static Map<String,Object> beans;
    //定义静态代码块
    static {
       try {
           properties = new Properties();
           InputStream in= BeanFactory.class.getClassLoader().getResourceAsStream("jdbc.properties");
           //加载流文件对象
           properties.load(in);
           Enumeration enumeration=properties.keys();
           beans=new HashMap<String,Object>();
           while (enumeration.hasMoreElements()){
               //获取配置文件所有的key
              String keys=enumeration.nextElement().toString();
              String benaPath=properties.getProperty(keys);
              //反射创建对象
               Object value= Class.forName(benaPath).newInstance();
               beans.put(keys,value);
           }
       }catch (Exception e){
           throw new ExceptionInInitializerError("初始化properties文件错误");
       }
    }

    /**
     * 根据beanName获取Bean
     * @param beanName
     * @return
     */
//    public static Object getBean(String beanName){
//        Object bean=null;
//        try{
//            String beanPath= properties.getProperty(beanName);
//            bean=Class.forName(beanPath).newInstance();//每次调用默认构造函数创建对象
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return bean;
//    }

    public static Object getBean(String beanName){
        return beans.get(beanName);
    }
}

二、IOC的概念和Spring中的IOC

以前使用者使用对象的时候都是自己去创建和组装对象,现在都交给spring容器去完成了,使用者使用对象的时候只需要在spring容器中查找去使用,在这个过程中对象的创建和组装过程被反转了,以前是使用者自己主动控制的,现在对象的创建和组装交给spring完成了,对象的构建过程被反转了,所以叫做控制反转。
作用:IOC是面向对象编程的一种设计原则,主要是为了降低系统代码的耦合度,让系统利于维护和扩展。
Spring-IOC:
spring-aop-5.2.3.RELEASE.jar
spring-beans-5.2.3.RELEASE.jar
spring-context-5.2.3.RELEASE.jar
spring-core-5.2.3.RELEASE.jar
spring-expression-5.2.3.RELEASE.jar
spring-jcl-5.2.3.RELEASE.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值