Spring框架与J2EE框架

Spring框架与J2EE框架

J2EE框架

简介:

J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定并得到广泛认可的工业标准。

J2EE的体系结构:

客户端层:负责与用户直接交互,J2EE支持多种客户端,所以客户端既可以是WEB浏览器,也可以是专用的Java客户端。

服务器端组件层:本层是为了基于WEB的应用服务的,利用J2EE中的JSP与Java Servlet技术,可以响应客户端的请求,并向后访问封装有商业逻辑的组件。

EJB层:本层主要封装了商务逻辑,完全企业计算机,提供了事务处理,负载均衡、安全、资源连接等各种基本服务,程序在编写EJB时可以不关心这些基本的服务,集中注意力于商务逻辑的实现。

企业信息系统层:企业信息系统层包括了企业的现有系统(包括数据库系统、文件系统),J2EE提供了多种技术以访问这些系统,如JDBC访问DBMS。

Spring框架

Spring 中包含的关键特性:

  • 强大的基于 JavaBeans 的采用控制反转 (Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。

  • 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂

  • 数据库事务的一般化抽象层,允许宣告式(Declarative)事务管理器,简化事务的划分使之与底层无关。

  • 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。

  • JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时,你无需再写出另一个 '终止' (finally) 模块. 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致.

  • 资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持, 解决了许多典型的Hibernate集成问题. 所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范.

  • 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts,WebWork,或 Tapestry。

  • 提供诸如事务管理等服务的面向方面编程框架。

Spring 能帮我们做什么

①.Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系

②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

③.Spring非常简单的帮我们管理数据库事务

④.Spring提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。

⑤.Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。

⑥.Spring方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)

 

主要功能点细说

① IOC 根据配置文件创建及组装对象之间的依赖关系

通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式。

主动创建的模式中,责任归于开发者,而在被动的模式下,责任归于 IoC 容器,基于这样的被动形式,我们就说对象被控制反转了。(也可以说是反转了控制)

IOC初始化过程: Bean 的定义和初始化在 Spring IoC 容器是两大步骤,它是1、先定义,然后2、初始化和依赖注入的。

定义:这个过程就是将 BeanDefinition 的信息发布到 Spring IoC 容器中

1.Resource 定位 Spring IoC 容器先根据开发者的配置,进行资源的定位,在 Spring 的开发中,通过 XML 或者注解都是十 分常见的方式,定位的内容是由开发者提供的。

2.BeanDefinition 的载入 这个时候只是将 Resource 定位到的信息,保存到 Bean 定义(BeanDefinition)中,此时并不会创建 Bean 的实例

3.BeanDefinition 的注册

初始化和依赖注入:通过Spring Bean的 【lazy-init】,去初始化 Spring Bean 。

②面向切面编程

  • 核心业务,比如登陆,增加数据,删除数据都叫核心业务

  • 周边功能,比如性能统计,日志,事务管理等等

面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP。

AOP的目标:将与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码降低模块间的耦合度,并有利于未来的可拓展性和可维护性

AOP 当中的概念:

  • 切入点(Pointcut) 在哪些类,哪些方法上切入(where

  • 通知(Advice) 在方法执行的什么实际(when:方法前/方法后/方法前后)做什么(what:增强的功能)

  • 切面(Aspect) 切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强!

  • 织入(Weaving) 把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)

 

Spring 中常用注解:

@Component(value = "student1")
public class Student {

	@Value("1")
	int id;
	@Value("student_name_1")
	String name;

    // getter and setter
}	

@ComponentScan
public class StudentConfig {
}

@Component("studentService")
public class StudentServiceImp implements StudentService {

	@Autowired
	private Student student = null;

     // getter and setter
	public void printStudentInfo() {
		System.out.println("学生的 id 为:" + student.getName());
		System.out.println("学生的 name 为:" + student.getName());
	}
}

<bean name="source1" class="pojo.Source">
    <property name="fruit" value="橙子"/>
    <property name="sugar" value="多糖"/>
    <property name="size" value="超大杯"/>
</bean>
<bean name="source2" class="pojo.Source">
    <property name="fruit" value="橙子"/>
    <property name="sugar" value="少糖"/>
    <property name="size" value="小杯"/>
</bean>
  
  /* 包名和import */
public class JuiceMaker {
    ......
    @Autowired
    @Qualifier("source1")
    public void setSource(Source source) {
        this.source = source;
    }
}

@Component注解:

相当于在 XML 中定义的 Bean 的 id。

@Value注解:

表示值的注入,跟在 XML 中写 value 属性是一样的。

@ComponentScan注解

代表进行扫描,默认是扫描当前包的路径,扫描所有带有 @Component 注解的 POJO。

@Autowired自动装配

自动注入一个 Source 类型的 Bean 资源

@Primary 注解: 代表首要的,当 Spring IoC 检测到有多个相同类型的 Bean 资源的时候,会优先注入使用该注解的类。

@Qualifier 注解: 上面所谈及的歧义性,一个重要的原因是 Spring 在寻找依赖注入的时候是按照类型注入引起的。除了按类型查找 Bean,

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值