框架2 Spring

spring是分层的JavaSE及JavaEE应用于全栈的轻量级开源框架,以IoC(Inverse Of Control:控制反转/反转控制)和AOP(Aspact Oriented Programming:面向切面编程)为核心,提供了表现层SpringMVC和持久层Spring JDBC以及业务层事务管理等众多模块的企业级应用技术,还能整合开源世界中众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架。

SSH(struts2 spring hibernate)

SSM(springmvc spring mybatis)

Spring的本质是管理软件中的对象,即创建对象维护对象之间的关系

耦合性(Coupling),也叫耦合度

在软件工程中,耦合指的就是对象之间的依赖关系。对象之间的耦合越高,则表明模块的独立性和可复用性越差,且维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

内聚和耦合

  • 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。
  • 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却不要那么紧密。

降低程序之间的依赖程度,即降低程序之间的耦合度的过程就叫做解耦。

在实际开发中可以将三层(表现层、业务层、持久层)的对象都使用配置文件配置起来,当启动服务器加载应用时,可以通过工厂读取配置文件,根据配置文件中的配置将这些对象创建出来,在接下来使用的时候,直接拿过来使用即可。

那么,这个负责读取配置文件,根据配置文件创建并返回这些对象的类就是工厂。

【工厂+接口+配置文件】的方式解除程序中的耦合

Bean: 可重用组件(计算机英语)

JavaBean:使用Java语言编写的可重用组件,例如:service层、dao层等

JavaBean:通常分为业务Bean和实体Bean

业务Bean:处理业务逻辑,service层、dao层

实体Bean:封装数据,例如,为了封装员工信息而编写的Emp实体类.

解除耦合:(1)需要提供配置文件,在配置文件中配置service和dao的实现类

配置内容为:唯一标识=实现类的全限定类名(key=value结构)

(2)通过工厂读取配置文件中配置的全限定类名,利用反射创建对象。

xml配置文件、properties配置文件

 

spring核心配置文件—applicationContext.xml    添加文件头信息:将Service接口的实现类的实例 以及Dao接口的实现类的实例交给Spring容器创建

<?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">
  
  <!-- 将EmpService接口的实现类的实例交给spring创建 -->
    <bean id="empService" class="com.tedu.service.EmpServiceImpl"></bean>
  
  <!-- 将EmpDao接口的实现类的实例交给spring创建 -->
    <bean id="empDao" class="com.tedu.dao.EmpDaoImpl"></bean>
  
</beans>

在Spring容器中管理的Bean对象的作用域,可以通过scope属性或用相关注解指定其作用域。最常用是singleton(单例)或prototype(多例)

1) singleton:单实例,是默认值。这个作用域标识的对象具备全局唯一性。

2) prototype:多实例。这个作用域标识的对象每次获取都会创建新的对象。

之所以用单实例,在没有线程安全问题的前提下,没必要每个请求都创建一个对象,这样子既浪费CPU又浪费内存;

之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态(例如,可改变的成员变量),此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;

用单例和多例的标准只有一个:当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),使用多实例,否则单实例;

在Spring中配置Bean实例是单例还是多例方法是:

单例:<bean id="user" scope="singleton" class="com.tedu.spring.User"></bean>

多例:<bean id="user" scope="prototype" class="com.tedu.spring.User"></bean>

DI(Dependency Injection)依赖注入 

(1).Set方式注入

(2).构造方法注入

(3)接口注入

基于注解的注入

@Autowired(自动注入)修饰符有三个属性:Constructor,byType,byName。默认按照byType注入。

constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。

byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。
byType:查找所有的set方法,将符合符合参数类型的bean注入。

主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:

  1. @Component:可以用于注册所有bean
  2. @Repository:主要用于注册dao层的bean
  3. @Controller:主要用于注册控制层的bean
  4. @Service:主要用于注册服务层的bean

在写DAO函数的时候,一般要写一个@Mapper,作用为:(参考https://blog.csdn.net/weixin_39666581/article/details/81057385

1:为了把mapper这个DAO交给Spring管理 

2:为了不再写mapper映射文件

3:为了给mapper接口 自动根据一个添加@Mapper注解的接口生成一个实现类

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值