码迷,mamicode.com
首页 > 编程语言 > 详细

spring

时间:2020-07-01 14:16:07      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:接口   查询   osi   jetty   解耦合   not   instance   依赖   ack   

1. 引言

1.1 EJB存在的问题

  1. 运行环境苛刻
  2. 代码移植性差

1.2 什么是Spring

Spring是一个轻量级的JavaEE解决方案,整合众多优秀的设计模式。

  • 轻量级
    1. 对于运行环境没有特殊要求
      开源: Tomcat resion jetty
      收费: weblogic webaphere
    2. 代码移植性高: 不需要实现额外接口
  • JavaEE的解决方案
    img1
  • 整合设计模式
    1. 工厂
    2. 代理
    3. 模板
    4. 策略
  • 设计模式
    • ?义概念:?向对象设计中,解决特定问题的经典代码。
    • 狭义概念:GOF4?帮定义的23种设计模式:??、适配器、装饰器、??、代理、模板…

1.3 ??设计模式

  1. 概念:通过??类,创建对象;

    User user = new User();
    UserDAO userDAO = new UserDAOImpl();
    
  2. 好处:解耦合
    • 耦合:指定是代码间的强关联关系,??的改变会影响到另??;
    • 问题:不利于代码维护;
    • 简单:把接?的实现类,硬编码在程序中;

      UserService userService = new UserServiceImpl();
      

1.4 简单工厂的设计

package com.baizhiedu.basic;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
    private static Properties env = new Properties();

    static{
        try {
            //第一步 获得IO输入流
            InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
            //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl
            env.load(inputStream);

            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /*
           对象的创建方式:
               1. 直接调用构造方法 创建对象  UserService userService = new UserServiceImpl();
               2. 通过反射的形式 创建对象 解耦合
               Class clazz = Class.forName("com.baizhiedu.basic.UserServiceImpl");
               UserService userService = (UserService)clazz.newInstance();
     */

    public static UserService getUserService() {
        UserService userService = null;
        try {
            //com.baizhiedu.basic.UserServiceImpl
            Class clazz = Class.forName(env.getProperty("userService"));
            userService = (UserService) clazz.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return userService;
    }

    public static UserDAO getUserDAO(){
        UserDAO userDAO = null;
        try {
            Class clazz = Class.forName(env.getProperty("userDAO"));
            userDAO = (UserDAO) clazz.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return userDAO;
    }

}

配置文件 applicationContext.properties:

# Properties 集合 存储 Properties文件的内容
# 特殊Map key=String value=String
# Properties [userService = com.baizhiedu.xxx.UserServiceImpl]
# Properties.getProperty("userService")

userService = com.baizhiedu.basic.UserServiceImpl
userDAO = com.baizhiedu.basic.UserDAOImpl

1.5 通用工厂的设计

问题:简单??会存在?量的代码冗余。
img2

通???的代码:

package com.baizhiedu.basic;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
    private static Properties env = new Properties();
    static{
        try {
            //第一步 获得IO输入流
            InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
            //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl
            env.load(inputStream);

            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

     /*
      key 小配置文件中的key [userDAO,userService]
      */
     public static Object getBean(String key){
         Object ret = null;
         try {
             Class clazz = Class.forName(env.getProperty(key));
             ret = clazz.newInstance();
         } catch (Exception e) {
            e.printStackTrace();
         }
         return ret;
     }

}

1.6 通???的使??式

  1. 定义类型 (类)
  2. 通过配置?件的配置告知?? applicationContext.properties 中 key = value;
  3. 通过??获得类的对象 Object ret = BeanFactory.getBean("key");

1.7 总结:

Spring本质: ?? ApplicationContext (applicationContext.xml)

2. 第一个 Spring 程序

使用工具idea

2.1 环境搭建

依赖查询网站:https://mvnrepository.com/;

  • 配置 Spring 的 jar 包:

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.4.RELEASE</version>
    </dependency>
    
  • Spring 的配置文件:
    1. 配置?件的放置位置:任意位置,没有硬性要求;
    2. 配置?件的命名 :没有硬性要求,建议: applicationContext.xml
  • 思考:?后应? Spring 框架时,需要进?配置?件路径的设置。

spring

标签:接口   查询   osi   jetty   解耦合   not   instance   依赖   ack   

原文地址:https://www.cnblogs.com/instinct-em/p/13218775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!