java spring java三大主流框架
其实java spring的问题并不复杂,但是又很多的朋友都不太了解java三大主流框架,因此呢,今天小编就来为大家分享java spring的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
java中spring是什么意思
java中spring是一个框架。
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。
spring优点:
◆J2EE应该更加容易使用。
◆面向对象的设计比任何实现技术(比如J2EE)都重要。
◆面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)
◆代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
◆JavaBean提供了应用程序配置的最好方法。
◆在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
spring 中如何实现jsp与java的交互
spring中利用mvc框架就可以实现jsp和java交互了。
以下用spring mvc输出hello world为例来说明:
一、项目依赖的jar包:
1.Spring框架依赖的jar包:
日志:commons-logging-1.1.3.jar;
JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;
2.Spring的jar包:
spring-framework-3.2.5.RELEASE/libs中的jar包(这里为了方便我直接把全部都复制过去了);
把以上的jar包全部复制到项目的WebContent/WEB-INF/lib目录中。
二、在/WEB-INF中添加web.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="" xmlns="" xmlns:web="" xsi:schemaLocation=" " id="WebApp_ID" version="3.0">
<display-name>SpringMVCLesson</display-name>
<servlet>
<servlet-name>SpringMVCLesson</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springservlet-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- load-on-startup必须放在最后-->
</servlet>
<!-- Spring MVC配置文件结束-->
<servlet-mapping>
<servlet-name>SpringMVCLesson</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
三、springservlet-config.xml文件配置:
在项目中新建一个resources的Source Folder文件夹,并添加springservlet-config.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""
xmlns:xsi=""
xmlns:p=""
xmlns:context=""
xmlns:util=""
xmlns:mvc=""
xsi:schemaLocation="
">
<!--默认的注解映射的支持-->
<mvc:annotation-driven/>
<!--如果当前请求为“/”时,则转发到“/helloworld/index”-->
<mvc:view-controller path="/" view-name="forward:/helloworld/index"/>
<!--静态资源映射-->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/"/>
<mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/"/>
<mvc:resources mapping="images/**" location="/WEB-INF/images/"/>
<!--当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问-->
<mvc:default-servlet-handler/>
<!--开启controller注解支持-->
<!-- use-default-filters="false"只扫描指定的注解-->
<context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="contentType" value="text/html"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
<mvc:annotation-driven/>开启注解映射支持,它是为了简化配置的缩写形式,它相当于以下2个配置:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
由于我们在web.xml文件里面配置的是拦截所有的请求到该servlet,所以我们在这里要对静态资源文件映射作一下配置,否则请求这些资源文件会返回404:
<!--静态资源映射-->
<mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/"/>
<mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/"/>
<mvc:resources mapping="images/**" location="/WEB-INF/images/"/>
<!--当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问-->
<mvc:default-servlet-handler/>
开启Controller注解支持,并配置只扫描指定包下面的Controller:
<context:component-scan base-package="com.demo.web.controllers" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
配置视图解析器,并指定视图所在的文件夹:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="contentType" value="text/html"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
添加HelloWorldController,在项目中新建一个web的Source Folder文件夹,并在文件夹下面添加com.demo.web.controllers包,在包中添加一个HelloWorldController类,类中内容如下:
package com.demo.web.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value="/helloworld")
public class HelloWorldController{
@RequestMapping(value="/index", method={RequestMethod.GET})
public ModelAndView index(){
ModelAndView modelAndView= new ModelAndView();
modelAndView.addObject("message","Hello World!");
modelAndView.setViewName("index");
return modelAndView;
}
}
其中@Controller注解把该class指定为controller,controller上的@RequestMapping注解的 value值指定该controller所映射的请求。
方法上的@RequestMapping注解指定该方法为一个action,value值指定该action所映射的请求,method中的RequestMethod.GET指定该action只接受get请求。
ModelAndView中的setViewName指定了该action所对应的视图名称,解析视图时会在springservlet-config.xml文件指定的视图文件夹中寻找对应的视图。
添加视图,在项目/WEB-INF文件夹下新建一个views文件夹,并在views中添加index.jsp视图,视图内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message}
</body>
</html>
运行项目输出结果:
java怎么配置spring的bean
众所周知,Spring框架是控制反转(IOC)或依赖性注入(DI)模式的推动因素,而这种推动是通过基于容器的配置实现的。过去,Spring允许开发人员使用基于 XML的配置,通过利用应用程序上下文 XML文件来管理 bean依赖性。此文件处于应用程序的外部,包含 bean及其与该应用程序的依赖项的定义。尽管使用 XML配置较为简单和便捷,但仍有另外一种方法可定义 bean及其依赖项。这种方法也称为基于 Java的配置。不同于 XML,基于 Java的配置使您能够以编程方式管理 bean。这可通过运用多种注释来实现。这篇文章将演示 Java配置示例,并将其与传统 XML配置方法相对比。本文将按照如下步骤演示基于 Java的配置的基本用法:
理解@Configuration和@Bean注释
使用 AnnotationConfigApplicationContext注册配置类
配置 Web应用程序
实现 bean生命周期回调和范围
我们将使用一所在线大学的“创建课程”用例。在创建课程的过程中,还会创建主题或者模块,而各主题可能又有着不同的作业。因此,我们要创建三个 bean,分别为 Course、Module和 Assignment。Course bean将包含一个对 Module bean的引用,后者包含对 Assignment bean的引用。
理解@Configuration和@Bean注释
在理想的场景中,您可以在表示应用程序上下文的 XML中定义 bean。以下代码展示了创建课程用例中的上下文 XML及 bean定义:
清单 1. XML与 bean定义
<beans>
<bean id="course" class="demo.Course">
<property name="module" ref="module"/>
</bean>
<bean id="module" class="demo.Module">
<property name="assignment" ref="assignment"/>
</bean>
<bean id="assignment" class="demo.Assignment"/>
</beans>
以上 XML就是您在使用 Spring配置 bean时通常会编写的代码。这段 XML代码定义了 Course bean,它引用 Module bean。Module bean有一个 Assignment bean的引用。您现在要删除这段 XML,编写同等效果的 Java代码。您将使用基于 Java的配置定义上面指定的 bean。我们会将 XML替换为 Java类,这个 Java类现在将用作 bean配置的平台。我们将这个类命名为 AppContext.java。以下代码展示了 AppContext类。
清单 2.包含 bean定义的 AppContext配置类
@Configuration
public class AppContext{
@Bean
public Course course(){
Course course= new Course();
course.setModule(module());
return course;
}
@Bean
public Module module(){
Module module= new Module();
module.setAssignment(assignment());
return module;
}
@Bean
public Assignment assignment(){
return new Assignment();
}
}
正如您通过以上代码所看到的那样,现在可以以编程的方式将 bean定义为基于 Java的配置的一部分。AppContext类现在就像 XML一样表示配置类。这是通过利用@Configuration注释实现的。@Configuration注释位于类的顶端。它告知 Spring容器这个类是一个拥有 bean定义和依赖项的配置类。@Bean注释用于定义 bean。上述注释位于实例化 bean并设置依赖项的方法上方。方法名称与 bean id或默认名称相同。该方法的返回类型是向 Spring应用程序上下文注册的 bean。您可使用 bean的 setter方法来设置依赖项,容器将调用它们来连接相关项。基于 Java的配置也被视为基于注释的配置。
使用 AnnotationConfigApplicationContext注册配置类
在传统 XML方法中,您可使用 ClassPathXmlApplicationContext类来加载外部 XML上下文文件。但在使用基于 Java的配置时,有一个AnnotationConfigApplicationContext类。AnnotationConfigApplicationContext类是 ApplicationContext接口的一个实现,使您能够注册所注释的配置类。此处的配置类是使用@Configuration注释声明的 AppContext。在注册了所述类之后,@Bean注释的方法返回的所有 bean类型也会得到注册。以下代码演示了 AnnotationConfigApplicationContext类的使用:
清单 3.使用 AnnotationConfigApplicationContext注册 AppContext类
public static void main(String[] args){
ApplicationContext ctx= new AnnotationConfigApplicationContext(AppContext.class);
Course course= ctx.getBean(Course.class);
course.getName();
}
正如以上代码所示,AppContext配置类的注册方式是将其传递给 AnnotationConfigApplicationContext构造函数。此外,您还可以使用所述上下文类的 register方法来注册配置类。以下代码展示了另外一种方法。
清单 4.注册 AppContext类:另外一种方法
public static void main(String[] args){
ApplicationContext ctx= new AnnotationConfigApplicationContext();
ctx.register(AppContext.class)
}
注册配置类将自动注册@Bean注释的方法名称,因而其对应的 bean就是 Course、Module和 Assignment。随后您可以使用 getBean方法来获取相关的 bean,并调用其业务方法。如您所见,编写 Java的配置类并将其注册到 Spring上下文非常简单。下一节将讨论如何将基于 Java的配置与 Web应用程序配合使用。
配置 Web应用程序
过去,您通常要利用 XmlWebApplicationContext上下文来配置 Spring Web应用程序,即在 Web部署描述符文件 web.xml中指定外部 XML上下文文件的路径。XMLWebApplicationContext是 Web应用程序使用的默认上下文类。以下代码描述了 web.xml中指向将由ContextLoaderListener监听器类载入的外部 XML上下文文件的元素。
清单 5.使用外部 XML上下文文件的 web.xml
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>sampleServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
...
</web-app>
现在,您要将 web.xml中的上述代码更改为使用 AnnotationConfigApplicationContext类。切记,XmlWebApplicationContext是 Spring为 Web应用程序使用的默认上下文实现,因此您永远不必在您的 web.xml文件中显式指定这个上下文类。现在,您将使用基于 Java的配置,因此在配置 Web应用程序时,需要在 web.xml文件中指定 AnnotationConfigApplicationContext类。上述代码将修改如下:
清单 6.修改后的使用 AnnotationConfigApplicationContext的 web.xml
<web-app>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.
support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
demo.AppContext
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>sampleServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.
support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
</servlet>
...
</web-app>
以上修改后的 web.xml现在定义了 AnnotationConfigWebApplicationContext上下文类,并将其作为上下文参数和 servlet元素的一部分。上下文配置位置现在指向 AppContext配置类。这非常简单。下一节将演示 bean的生命周期回调和范围的实现。
实现 bean生命周期回调和范围
生命周期回调
您还可以使用基于 Java的配置来管理 bean的生命周期。@Bean支持两种属性,即 initMethod和 destroyMethod,这些属性可用于定义生命周期方法。在实例化 bean或即将销毁它时,容器便可调用生命周期方法。生命周期方法也称为回调方法,因为它将由容器调用。使用@Bean注释注册的 bean也支持 JSR-250规定的标准@PostConstruct和@PreDestroy注释。如果您正在使用 XML方法来定义 bean,那么就应该使用 bean元素来定义生命周期回调方法。以下代码显示了在 XML配置中通常使用 bean元素定义回调的方法。
清单 7.使用 XML方法实现生命周期回调
<bean id="course" class="demo.Course" init-method="setup" destroy-method="cleanup">
<property name="module" ref="module"/>
</bean>
以下代码演示了使用 Java配置的生命周期方法
清单 8.使用 AppContext配置类实现 bean生命周期方法
@Configuration
public class AppContext{
@Bean(initMethod="setup", destroyMethod="cleanup")
public Course course(){
Course course= new Course();
course.setModule(module());
return course;
}
@Bean(initMethod="setup", destroyMethod="cleanup")
public Module module(){
Module module= new Module();
module.setAssignment(assignment());
return module;
}
...
}
public class Course{
private Module module;
private String name;
public Course(){
}
public void setup(){
this.name="M100 Pythagoras Theorems"
}
public void setModule(Module module){
this.module= module;
}
public void cleanup(){
module= null;
}
}
上面的代码重新访问了 AppContext配置类。@Bean注释现在有两个额外的属性,即 initMethod和 destroyMethod。它们定义了生命周期方法的设置和清除。这些方法是在已经注册的 bean中实现的,最终由容器在 bean初始化及其销毁之前调用它。这里以 Course bean为例,提供了生命周期方法实现。所实现的方法是 setup和 cleanup。同样,您还可以在 Module和 Assignment bean中实现这些方法。
Bean范围
bean的方法是使用@Scope注释定义的。XML中实现这一目标的方法是指定 bean元素中的 scope属性。
清单 9.使用 XML方法定义 bean范围
<bean id="course" class="demo.Course" scope="prototype">
<property name="module" ref="module"/>
</bean>
以下代码展示了使用 Java配置的 bean范围定义:
清单 10.使用 AppContext配置类定义 bean范围
@Configuration
public class AppContext{
@Bean(initMethod="setup", destroyMethod="cleanup")
@Scope("prototype")
public Course course(){
Course course= new Course();
course.setModule(module());
return course;
}
...
}
正如您在上面的代码中所看到的那样,在 Java配置类中定义 bean的范围非常简单。上面的 AppContext配置类使用@Scope注释为 Coursebean定义了一个 prototype范围。默认范围是 singleton。
利用 Java配置可以做许多事情。本文只触及了一些基础内容。使用 Java配置并无显著优势,它仅仅是 Spring提供的 XML配置的替代方法。对于不喜欢在框架中使用 XML的人来说,这是实现配置的一种出色方法。但缺点也是显而易见的,如果您对 Java类中的配置做出了任何更改,就必须重新编译应用程序。
文章到此结束,如果本次分享的java spring和java三大主流框架的问题解决了您的问题,那么我们由衷的感到高兴!