ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring第一天

2019-02-25 20:53:19  阅读:240  来源: 互联网

标签:装配 第一天 Spring dependency bean 模块 对应


前置知识

    1.三层架构及其MVC的关系

三层架构是一个分层式的软件体系架构设计,是一个概念。分为表现层UI,业务逻辑层BLL,数据访问层DAL。三层架构的重点是实现“高内聚,低耦合”,即解耦。

MVC的作用是实现三层架构中的UI层,例如:

M层(model)是应用程序的主体部分,提供数据和数据之间的关系(类与类之间)、转化等等。

V层(view)是应用程序中用户界面相关部分,具体实现数据的展示和输入功能。例如 JSP HTML

C层(controller)是根据用户的输入,控制用户界面的数据显示和更新model对象状态。起到控制整个业务流程、实现mv两层之间协同作战的目的。Servlet  service(JAVA WEB)

MVC是一种设计模式,目的是让HTML代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。

小项目经常会将三层架构和MVC模式混为一谈,认为M对应数据访问层DAL(Dao和实体类),V对应表现层UI,C对应业务逻辑层BLL。这是因为在很多时候一些小项目分层架构不明细、缺少对应的概念分包所导致的。

  1. 高内聚、低耦合

这个概念是软件工程中的一个概念,是判断设计好坏的标准。简而言之,就是看类的内聚性是否高,耦合度是否低

高内聚:一个软件模块必须由关联性很强的代码组成,也就是一个模块只做一件事。

低耦合:不同的模块之间互相关联的程度是否足够低,面向对象变成面向接口编程(实例,改造dao并采取面向接口编程)。

    设计模式之工厂模式(简单工厂、抽象工厂、单例)

(单例)

1. 单例类只能有一个实例

2. 单例类必须创建自己唯一的实例。

3. 单例类必须为其他对象提供这一实例。

那么如何实现满足上述条件的单例类呢?答案是:

1. 私有构造方法。

2. 内部创建静态对象。

3. 提供静态方法返回该静态对象。

懒汉模式/饿汉模式

//饿汉式
class T{
	
	private T(){
			
	}
	private static T t = new T();
	
	public static T a(){
		
		return t;
	}
}
//懒汉式
class T1{
	private T1(){
		
	}
	private static T1 t1;
	
	public static T1 a(){
		
		if(t1==null){
			t1 = new T1();
		}
		return t1;	
	}

  Spring初体验之IOC

 

  1. spring是什么,它的优点是什么

         a)   一个轻量级的企业开发软件,时至今日已经在很多企业被应用。

         b)   非侵入式框架,优点在于松耦合、可配置、易测试。

         2.String体系架构

        

         

3.Spring主要模块

a)       Spring核心模块(Spring Core):Spring的核心容器模块,它提供IOC的支持。该模块中包含BeanFactory,它采用工厂模式来实现IOC,负责对bean的生命周期的管理。

b)       Application Context(上下文模块):该模块扩展了BeanFactory的功能,例如提供了i18n,系统生命周期以及验证的支持

c)        Spring的AOP模块:该模块为应用系统的AOP开发提供了支持。

d)       JDBC和DAO模块:提供了JDBC封装的模板代码,使得使用JDBC开发更加简洁。

e)       ORM映射模块:该模块提供了对许多流行的ORM框架的支持,其中包括Hibernate,JDO和iBATIS SQL的支持

f)         Spring Web模块:该模块中Spring提供了对其它的WEB框架的支持,包知Struts,JSF,WEBWORK等

g)       Spring MVC框架:Spring提供的用于开发WEB应用的MVC框架

 4.Spring核心应用之IOC:

a)       IOC(控制反转):程序中各个组件之间的关系,不由程序代码直接操控,而由容器控制。控制权由应用代码中转到了外部容器,即所谓的反转。

b)       DI(依赖注入):各个组件之间的依赖关系不是在程序中写死,而是写在外部的配置文件中,然后运行时通过容器动态注入。

5。SringIOC开发:

a)       导入jar包:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
    <version>4.10</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.9</version>
</dependency>
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.2.4</version>
</dependency>

 

b)       声明一个bean

c)        创建配置文件,并从配置文件中配置对象

d)       创建测试类,通过XmlBeanFactory初始化bean工厂,通过bean工厂从xml中读取对象。

6.异同:

a)       BeanFactory和ApplicationContext:ApplicationCotext是spring更加高级的IOC容器除BeanFactory的功能外,还有如下特性:

提供文本信息解析工具,包括对国际化支持。

提供载入文件资源的通用方法,如图片。

可以向注册为监听器的bean发送事件。

BeanFactory延迟加载所有bean,直到getBean()方法被调用。ApplicationCotext会在启动后预载入所有单例bean

b)       Id和name:使用基本一致,name允许有一些特殊字符

c)        通过property初始化对象属性和constructor-arg初始化对象属性

d)       Bean和Property:

7.集合装配:如果对应bean的属性是一个集合则需要使用集合装配,Spring支持多种集合装配类型:

a)       <list>对应类型为java.util.List、java.util.Vector 、java.util.Collection 、数组的属性

b)       <set>对应类型为java.util.Set的属性

c)        <map>对应类型为java.util.Map的属性

d)       <props>对应类型为java.util.Properties的属性

  1. 集合装配示例:

a)       List装配:

<property name=“list">

<list>

<value>a</value>

<value>b</value>

</list>

</property>

b)       Set装配:

<property name=“set">

<set>

<value>a</value>

<value>b</value>

</set>

</property>

c)        Map装配:

<property name=“map">

<map>

<entry key="1" value=“a"></entry>

<entry key="2" value=“b"></entry>

</map>

</property>

 

8.自动装配:为了方便配置,spring提供了自动装配,有四种类型,分别如下:

a)       byName:寻找和属性名相同的bean,若找不到,则装不上。

b)       byType:寻找和属性类型相同的bean,若找不到,则装不上,找到多个,抛异常。

c)        constructor:查找和bean的构造参数一致的一个或多个bean,若找不到或找到多个抛则异常。按照参数的类型装配,与(2)相似.

d)       autodetect:首先尝试用(3)来装配,然后使用(2)方式。不确定性的处理与(3)和(2)一致。

注意:使用最多的是通过byName进行诸如

  1. Bean的作用域:通过scope标签指定,有如下常见作用域

a)       singleton 单实例,即在整个应用程序中有一个Bean的实例。

b)       prototype原型,每次请求获取bean时,容器都会构建新的bean实例。

以下几个为Spring2.0新加的作用域:

c)        session对应web应用时, 对应Web应用的每个会话会建立一个bean的实例。

d)       request对应web应用时,对应Web的每个请求会建立一个bean实例。

  1. Bean的延迟加载:通过lazy-init 属性确定是否延迟初始化,默认为false
  2. Annotation注解模式实现注入:

a)       修改spring_ico.xml,写入<context:component-scan base-package="需要扫描的包名"/>。

b)       将需要受Spring管理的组件加入@Component[(“cpmponentName”)]

c)        如果某些组件需要被注入其他组件的话,需要在set方法加入: @Resource[(name=“cpmponentName”)]

9.Annotation的优缺点:

a)       优点:灵活、简单、开发效率高

b)       缺点:如果没有源码,就无法运用annotation,只能使用xml

 

 

 

     

标签:装配,第一天,Spring,dependency,bean,模块,对应
来源: https://www.cnblogs.com/silentwlan/p/10433241.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有