使用eclipse 实现spring 框架需要哪些包?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用eclipse 实现spring 框架需要哪些包?相关的知识,希望对你有一定的参考价值。
参考技术Aspring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。spring-src.zip就是所有的源代码压缩包。
除了spring.jar 文件,Spring 还包括有其它21 个独立的jar 包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar 包,而不必引入整个spring.jar 的所有类文件。
spring-core.jar这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
外部依赖Commons Logging, (Log4J)。
spring-beans.jar这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
外部依赖spring-core,(CGLIB)。
spring-aop.jar这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持。使用基于AOP 的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
外部依赖spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。
spring-context.jar这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。
外部依赖spring-beans, (spring-aop)。
spring-dao.jar这个jar 文件包含Spring DAO、Spring Transaction 进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。
外部依赖spring-core,(spring-aop, spring-context, JTA API)。
spring-jdbc.jar这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。
外部依赖spring-beans,spring-dao。
spring-support.jar这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。
外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache)
spring-web.jar这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。
外部依赖spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。
spring-webmvc.jar这个jar 文件包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。
外部依赖spring-web, (spring-support,Tiles,iText,POI)。
spring-portlet.jar
spring自己实现的一个类似Spring MVC的框架。包括一个MVC框架和控制器。
外部依赖spring-web, Portlet API,(spring-webmvc)。
spring-struts.jar
Struts框架支持,可以更方便更容易的集成Struts框架。
外部依赖spring-web,Struts。
spring-remoting.jar
这个jar 文件包含支持EJB、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。
外部依赖spring-aop, (spring-context,spring-web,Hessian,Burlap,JAX-RPC,EJB API)。
spring-jmx.jar这个jar包提供了对JMX 1.0/1.2的支持类。
外部依赖spring-beans,spring-aop, JMX API。
spring-jms.jar这个jar包提供了对JMS 1.0.2/1.1的支持类。
外部依赖spring-beans,spring-dao,JMS API。
spring-jca.jar对JCA 1.0的支持。外部依赖spring-beans,spring-dao, JCA API。
spring-jdo.jar对JDO 1.0/2.0的支持。外部依赖spring-jdbc, JDO API, (spring-web)。
spring-jpa.jar对JPA 1.0的支持。外部依赖spring-jdbc, JPA API, (spring-web)。
spring-hibernate2.jar
对Hibernate 2.1的支持,已经不建议使用。外部依赖spring-jdbc,Hibernate2,(spring-web)。
spring-hibernate3.jar
对Hibernate 3.0/3.1/3.2的支持。
外部依赖spring-jdbc,Hibernate3,(spring-web)。
spring-toplink.jar
对TopLink框架的支持。
外部依赖spring-jdbc,TopLink。
spring-ibatis.jar
对iBATIS SQL Maps的支持。
外部依赖spring-jdbc,iBATIS SQL Maps。
另外的两个包。
spring-mock.jar
这个jar 文件包含Spring 一整套mock 类来辅助应用的测试。Spring 测试套件使用了其中大量mock 类,这样测试就更加简单。模拟HttpServletRequest 和HttpServletResponse 类在Web 应用单元测试是很方便的。并且提供了对JUnit的支持。
外部依赖spring-core。
spring-aspects.jar
提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。
外部依赖。
WEAVER JARS (dist/weavers)说明。
spring-agent.jar
Spring的InstrumentationSavingAgent (为InstrumentationLoadTimeWeaver),一个设备代理包,可以参考JDK1.5的Instrumentation功能获得更多信息。
外部依赖none (for use at JVM startup: "-javaagent:spring-agent.jar")。
spring-tomcat-weaver.jar
扩展Tomcat的ClassLoader,使其可以使用instrumentation(设备)类。
外部依赖none (for deployment into Tomcat's "server/lib" directory)。
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。2003年,Eclipse 3.0选择OSGi服务平台规范为运行时架构。2007年6月,稳定版3.3发布;2008年6月发布代号为Ganymede的3.4版;2009年6月发布代号为Galileo的3.5版;2010年6月发布代号为Helios的3.6版;2011年6月发布代号为Indigo的3.7版;2012年6月发布代号为Juno的4.2版;2013年6月发布代号为Kepler的4.3版;2014年6月发布代号为Luna的4.4版;2015年6月项目发布代号为Mars的4.5版。
阿里二面:Spring框架使用了哪些设计模式?
1 简单工厂模式
当A对象需要调用B对象的方法时,我们需要在A中new一个B的实例,我们把这种方式叫作硬编码耦合,缺点是一旦需求发生变化,比如需要使用C类来代替B时,就要改写A类的方法。
假如应用中有上千个类以硬编码的方式耦合了B,改就很头疼。
于是有了简单工厂模式,又叫静态工厂方法,就是由一个工厂类根据传入参数,动态决定应该创建哪个产品类。
Spring中的BeanFactory就是简单工厂模式的体现,BeanFactory是Spring IOC容器中的一个核心接口,它的定义如下:
可以通过它的具体实现类(如ClassPathXmlApplicationContext)获取Bean:
BeanFactory bf = new ClassPathXmlApplicationContext("spring.xml");
User userBean = (User) bf.getBean("userBean");
使用者无需自己new,而是通过工厂类的方法getBean获取对象实例,这就是简单工厂模式,只不过Spring是用反射创建Bean。
2 工厂方法模式
简单工厂中,由工厂类进行所有的逻辑判断、实例创建。
如果不想在工厂类中进行判断,可为不同产品提供不同工厂,不同工厂生产不同产品,每个工厂都只对应一个相应对象,这就是工厂方法模式。
Spring FactoryBean,工厂Bean
定义一个类UserFactoryBean实现FactoryBean接口,主要是在getObject方法里new一个User对象。
这样通过getBean(id) 获得的是该工厂所产生的User实例,而非UserFactoryBean本身实例:
BeanFactory bf = new ClassPathXmlApplicationContext("user.xml");
User userBean = (User) bf.getBean("userFactoryBean");
3 单例模式
一个类在整个系统运行过程中,只允许产生一个实例。
Spring Bean默认是单例模式。Spring 通过单例注册表(HashMap)方式:
public class DefaultSingletonBeanRegistry {
// 使用 ConcurrentHashMap 保存各种单实例对象
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>;
protected Object getSingleton(String beanName) {
// 先到 Map 中拿Object
Object singletonObject = singletonObjects.get(beanName);
// 若没拿到通过反射创建一个对象实例,并添加到HashMap中
if (singletonObject == null) {
singletonObjects.put(beanName,
Class.forName(beanName).newInstance());
}
// 返回对象实例
return singletonObjects.get(beanName);
}
}
4 代理模式
它与被代理对象实现相同接口,客户端必须通过代理才能与被代理的目标类进行交互,而代理一般在交互的过程中(交互前后),进行某些特定处理,比如在调用这个方法前做前置处理,调用这个方法后做后置处理。
好处
可以在目标对象业务功能的基础上添加一些公共的逻辑,比如我们想给目标对象加入日志、权限管理和事务控制等功能,我们就可以使用代理类来完成,而没必要修改目标类,从而使得目标类保持稳定。
符合开闭原则,不要随意修改别人写好的代码或方法。
代理又分为
静态代理
需要定义接口,被代理对象(目标对象)与代理对象(Proxy)一起实现相同接口:
// 抽象接口
public interface IStudentDao {
void save();
}
// 目标对象
public class StudentDao implements IStudentDao {
public void save() {
System.out.println("保存成功");
}
}
// 代理对象
public class StudentDaoProxy implements IStudentDao{
//持有目标对象的引用
private IStudentDao target;
public StudentDaoProxy(IStudentDao target){
this.target = target;
}
//在目标功能对象方法的前后加入事务控制
public void save() {
System.out.println("开始事务");
target.save();//执行目标对象的方法
System.out.println("提交事务");
}
}
public static void main(String[] args) {
//创建目标对象
StudentDao target = new StudentDao();
//创建代理对象,把目标对象传给代理对象,建立代理关系
StudentDaoProxy proxy = new StudentDaoProxy(target);
//执行的是代理的方法
proxy.save();
}
动态代理
Spring AOP采用动态代理,即代理类在程序运行时由JVM动态创建。
静态代理的例子中,代理类(StudentDaoProxy)是自定义的,在程序运行之前就已经编译完成。
而动态代理,代理类并不是在Java代码中定义,而是在运行时根据我们在Java代码中的“指示”动态生成的。
怎么“指示”JDK去动态地生成代理类呢?
在Java的java.lang.reflect包里提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成动态代理对象:
1.定义一个InvocationHandler类,将需要扩展的逻辑集中放到这个类中。
比如下面的例子模拟了添加事务控制:
public class MyInvocationHandler implements InvocationHandler {
private Object obj;
public MyInvocationHandler(Object obj){
this.obj=obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("开始事务");
Object result = method.invoke(obj, args);
System.out.println("开始事务");
return result;
}
}
- 使用 Proxy#newProxyInstance 动态创建代理对象
public static void main(String[] args) {
//创建目标对象StudentDao
IStudentDao stuDAO = new StudentDao();
//创建MyInvocationHandler对象
InvocationHandler handler = new MyInvocationHandler(stuDAO);
//使用Proxy.newProxyInstance动态的创建代理对象stuProxy
IStudentDao stuProxy = (IStudentDao)
Proxy.newProxyInstance(stuDAO.getClass().getClassLoader(), stuDAO.getClass().getInterfaces(), handler);
//动用代理对象的方法
stuProxy.save();
}
动态代理的优势在于可以很方便地对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。
Spring实现了通过动态代理对类进行方法级别的切面增强,即动态生成目标对象的代理类,并在代理类的方法中设置拦截器,通过执行拦截器中的逻辑增强了代理方法的功能,从而实现AOP。
以上是关于使用eclipse 实现spring 框架需要哪些包?的主要内容,如果未能解决你的问题,请参考以下文章