Spring学习笔记【一】工厂设计模式

概述

01 基本信息

spring解决企业开发的难度,减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。

02 优点

  1. 轻量:Spring框架使用的jar都比较小,运行占用的资源少,运行效率高,不依赖其他的jar
  2. 针对接口编程,解耦合
    • Spring提供了Ioc控制反转,由容器管理对象,对象之间的依赖关系
    • 原来在程序代码中的对象创建方式,现在由容器完成,对象之间的依赖解耦合
  3. Aop编程的支持
    • 通过Spring提供的AOP功能,方便进行面向切面的的编程,许多不容易用传统OOP实现的功能通过AOP轻松应对
  4. 方便集成各种优秀的框架

03 工厂设计模式

3.1 原来的编码方式出来的问题

  • UserDao
package com.spring.basic;

public interface UserDao {
    public void register(User user);
    public void login(User user);
}

  • UserDaoImpl
package com.spring.basic;

public class UserDaoImpl implements UserDao{
    @Override
    public void register(User user) {
        System.out.println("注册 " + user);
    }

    @Override
    public void login(User user) {
        System.out.println("登录 " + user);

    }
}

  • UserService
package com.spring.basic;

public interface UserService {
    public void register(User user);
    public void login(User user);
}

  • UserServiceImpl
package com.spring.basic;

public class UserServiceImpl implements UserService{
    private UserDao userDao = new UserDaoImpl();
    @Override
    public void register(User user) {
        userDao.register(user);
    }

    @Override
    public void login(User user) {
        userDao.login(user);
    }
}

  • 调用
import com.spring.basic.User;
import com.spring.basic.UserService;
import com.spring.basic.UserServiceImpl;
import org.junit.Test;

public class Demo {
    @Test
    public void test1(){
        UserService userService = new UserServiceImpl();
        User user = new User("freedom","123456");
        userService.login(user);
        userService.register(user);
    }
}

问题

  1. 代码直接的耦合度比较高,一方发生改变,另外一方就要发生改变;如果说之后我不想要这个实现类了,会直接修改代码
  2. 简单来讲,就是把接口的实现类,硬编码到程序中,如果说 我之后给UserService 这个接口,换一个实现类,会直接修改Demo这个类的代码,不符合对拓展开发,对修改关闭的设计原则

3.2 反射工厂

  1. 创建一个工厂,我们需要什么对象,从工厂中拿就行了
  2. 这样的好处就是:如果说我们以后不想要现在的这个接口实现类的时候,我们只需要在配置文件中进行修改实现类名称即可

步骤一:创建一个配置文件 application.properties

userService = com.spring.basic.UserServiceImpl
userDao = com.spring.basic.UserDaoImpl

步骤二:创建工厂

  • 将 接口的实现类名称 放在配置文件中,通过 反射 进行创建对象
package com.spring.basic;

import java.io.*;
import java.util.Properties;

public class BeanFactory {
    private BeanFactory(){}
    public static Properties properties = new Properties();
    static{
        //从配置文件中读取信息
        try {
            properties = new Properties();
            //从配置文件中读取信息
            InputStream resourceAsStream = BeanFactory.class.getClassLoader().getResourceAsStream("/applicationContext.properties");
            properties.load(resourceAsStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Object getBean(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class c = Class.forName(properties.getProperty(className));
        Object res = c.newInstance();
        return res;
    }
}

步骤三:调用

        UserService userService =(UserService) BeanFactory.getBean("userService");
        User user = new User("freedom","123456");
        userService.login(user);
        userService.register(user);

04 总结

在工厂设计模式中,我们需要自己去创建这个工厂完成解耦合,现在,Spring框架为我们提供了这个工厂 (ApplicatonContext)

  • 这里的ApplicationContext ,就相当于我们在工厂模式之下的BeanFactory
  • 工厂模式之下的配置文件就是这里的applicationContext.properties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佩奇inging

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值