Spring第一天

前置知识

    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体系架构

        Spring第一天

         

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

 

 

 

     

上一篇:【Maven 】二、Maven 依赖范围、依赖排除与控制依赖是否传递


下一篇:从*仓库下载所想要的jar包