关于spring3.0注解详解

合集下载

Spring注解【非单例】

Spring注解【非单例】

Spring注解【⾮单例】花了⾄少⼀整天的时间解决了这个问题,必须记录这个纠结的过程,问题不可怕,思路很绕弯。

为了能说清楚⾃⼰的问题,我都⽤例⼦来模拟。

我有⼀个类MyThread是这样的:1 @Service2public class MyThread extends Thread {3 @Autowired4 MyService myService;5 ......6 }在主线程中有这样⼀个调⽤:1 @Autowired2 MyThread myThread;3 ......4public void invoke{5if(condition){6 myThread.start();7 }8 }9 ......我的invoke存在⼀个循环调⽤,此时遇到了第⼀个问题!问题⼀:抛出ng.IllegalThreadStateException。

问题⼀的解决:1//@Autowired2//MyThread myThread;3 ......4public void invoke {5if(condition){6 //myThread.start();6 MyThread myThread = new MyThread();7 myThread.start();8 }9 }引发的新的问题!问题⼆:我⽤了Spring注解,⽤new的话⽆法⽤注解实现注⼊,所以myThread中的myService对象抛出空指针。

问题⼆的解决:放弃了MyThread类,新写了⼀个类,开始绕弯。

1 @Service2public class MyRunable implements Runnable {3 @Autowired4 MyService myService;5 ......6 }相应的,修改主线程中的调⽤。

1//@Autowired2//MyThread myThread;3 @Autowired4 MyRunnable myRunnable;5 ......6public void invoke{7if(condition){8//MyThread myThread = new MyThread();9//myThread.start();10 Thread t = new Thread(myRunnable);11 t.start();12 }13 }14 ......⼜遇到了新的问题!我需要对myRunnable线程命名。

【SpringFramework】Spring入门教程(三)使用注解配置

【SpringFramework】Spring入门教程(三)使用注解配置

【SpringFramework】Spring⼊门教程(三)使⽤注解配置本⽂主要介绍四个⽅⾯:(1) 注解版本IOC和DI(2) Spring纯注解(3) Spring测试(4) SpringJDBC - Spring对数据库的操作使⽤注解配置Spring⼊门说在前⾯学习基于注解的IoC配置,⼤家脑海⾥⾸先得有⼀个认知,即注解配置和xml配置要实现的功能都是⼀样的,都是要降低模块间的耦合度。

仅仅只是配置的形式不⼀样。

关于实际的开发中到底使⽤xml还是注解,每家公司有着不同的使⽤习惯。

所以这两种配置⽅式我们都需要掌握。

基于注解配置的⽅式也已经逐渐代替xml配置。

所以我们必须要掌握使⽤注解的⽅式配置Spring。

配置步骤注意:如果使⽤Eclipse需要先安装了STS插件,或者使⽤STS开发⼯具创建项⽬。

本⽂使⽤IDEA进⾏演⽰。

1.2.1. 第⼀步:拷贝必备jar包到⼯程的lib⽬录。

注意:在基于注解的配置中,我们还要多拷贝⼀个aop的jar包。

如下图:1.2.2. 第⼆步:在类的根路径下创建⼀个任意名称的xml⽂件(不能是中⽂)注意:基于注解整合时,Spring配置⽂件导⼊约束时需要多导⼊⼀个context命名空间下的约束。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"></beans>1.2.3. 第⼆步:创建⼀个服务类创建⼀个测试的服务类,并且加⼊使⽤@Component注解,声明该类允许注⼊到Spring容器package org.cjw.service;import ponent;/*使⽤注解配置时,需要将Spring框架启动就创建对象的类表⽰为组件类表⽰组件类使⽤@Component注解*/@Componentpublic class CustomerService {public void save() {System.out.println("-保存数据-");}}1.2.4. 第四步在spring的配置⽂件加⼊扫描注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 声明扫描包及其⼦包的类,如果发现有组件注解的类,就创建对象并加⼊到容器中去 --><context:component-scan base-package="org.cjw" /></beans>1.2.5. 第五步:测试调⽤代码package org.cjw.test;import org.cjw.service.CustomerService;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CustomerServiceTest {@Testpublic void testSave() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");CustomerService customerService = context.getBean(CustomerService.class);customerService.save();}}--测试结果,如果可以调⽤服务⽅法,测试成功。

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作⽤与区别1、@Service⽤于标注业务层组件2、@Controller⽤于标注控制层组件(如struts中的action)3、@Repository⽤于标注数据访问组件,即DAO组件.4、@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。

5、@Autowired与@Resource的区别: @Autowired由Spring提供,只按照byType注⼊,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。

如果想使⽤名称装配可以结合@Qualifier注解进⾏使⽤。

public class UserService {@Autowired@Qualifier(name="userDao1")private UserDao userDao;} @Resource由J2EE提供,默认按照byName⾃动注⼊,Spring将@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型。

所以如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性则使⽤byType⾃动注⼊策略。

①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。

②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。

③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。

总结:@Resource的作⽤相当于@Autowired,只不过@Autowired按byType⾃动注⼊。

Spring常用的一些注解说明

Spring常用的一些注解说明

Spring常⽤的⼀些注解说明@Configuration从Spring3.0,@Configuration⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个或多个被@Bean注解的⽅法。

这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义。

@Bean@Bean注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理。

产⽣这个Bean对象的⽅法Spring只会调⽤⼀次,随后这个Spring将会将这个Bean对象放在⾃⼰的IOC容器中。

SpringIOC 容器管理⼀个或者多个bean,这些bean都需要在@Configuration注解下进⾏创建,在⼀个⽅法上使⽤@Bean注解就表明这个⽅法需要交给Spring进⾏管理。

@Autowired、@Resource@Resource和@Autowired注解都是⽤来实现依赖注⼊的。

只是@AutoWried按by type⾃动注⼊,⽽@Resource默认按byName⾃动注⼊。

♣ @Autowired@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。

如果没有Bean可以装配到@Autowired所标注的属性或参数中,⾃动装配就会失败,抛出NoSuchBeanDefinitionException.@Autowired可以对类成员变量、⽅法及构造函数进⾏标注,让 spring 完成 bean ⾃动装配的⼯作。

@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

♣ @Resource@Resource是JDK提供的注解,有两个重要属性,分别是name和type。

@Resource依赖注⼊时查找bean的规则既不指定name属性,也不指定type属性,则⾃动按byName⽅式进⾏查找。

SpringBootSwagger3.0配置

SpringBootSwagger3.0配置

SpringBootSwagger3.0配置1、导⼊Maven依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>2、配置application.ymlswagger:enable: trueapplication-name: xxx系统API说明application-version: 1.0application-description: springfox swagger 3.0整合Demotry-host: http://localhost:${server.port}3、添加实体类接收swagger配置信息import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.boot.context.properties.ConfigurationProperties;import ponent;@Component@ConfigurationProperties("swagger")@Data@AllArgsConstructor@NoArgsConstructorpublic class SwaggerProperties {/*** 是否开启swagger,⽣产环境⼀般关闭,所以这⾥定义⼀个变量*/private Boolean enable;/*** 项⽬应⽤名*/private String applicationName;/*** 项⽬版本信息*/private String applicationVersion;/*** 项⽬描述信息*/private String applicationDescription;/*** 接⼝调试地址*/private String tryHost;}4、Swagger配置类设置@Configurationpublic class SwaggerConfig implements WebMvcConfigurer {private final SwaggerProperties swaggerProperties;public SwaggerConfig(SwaggerProperties swaggerProperties) {this.swaggerProperties = swaggerProperties;}//可以创建多个Docket对象,添加进@Bean中并使⽤ .groupName("张*") 添加多个分组,前提是名称不要重复@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.OAS_30).pathMapping("/").groupName("张*")// 定义是否开启swagger,false为关闭,可以通过变量控制.enable(swaggerProperties.getEnable())// 将api的元信息设置为包含在json ResourceListing响应中。

详解Spring缓存注解@Cacheable,@CachePut,@CacheEvict使用

详解Spring缓存注解@Cacheable,@CachePut,@CacheEvict使用

详解Spring缓存注解@Cacheable,@CachePut,@CacheEvict使⽤注释介绍@Cacheable@Cacheable 的作⽤主要针对⽅法配置,能够根据⽅法的请求参数对其结果进⾏缓存@Cacheable 作⽤和配置⽅法参数解释examplevalue 缓存的名称,在 spring 配置⽂件中定义,必须指定⾄少⼀个例如:@Cacheable(value=”mycache”)@Cacheable(value={”cache1”,”cache2”}key 缓存的 key,可以为空,如果指定要按照SpEL 表达式编写,如果不指定,则缺省按照⽅法的所有参数进⾏组合@Cacheable(value=”testcache”,key=”#userName”)condition 缓存的条件,可以为空,使⽤ SpEL 编写,返回 true或者 false,只有为 true 才进⾏缓存@Cacheable(value=”testcache”,condition=”#userName.length()>2”)实例@Cacheable(value=”accountCache”),这个注释的意思是,当调⽤这个⽅法的时候,会从⼀个名叫 accountCache 的缓存中查询,如果没有,则执⾏实际的⽅法(即查询数据库),并将执⾏的结果存⼊缓存中,否则返回缓存中的对象。

这⾥的缓存中的 key 就是参数 userName,value 就是Account 对象。

“accountCache”缓存是在 spring*.xml 中定义的名称。

@Cacheable(value="accountCache")// 使⽤了⼀个缓存名叫 accountCachepublic Account getAccountByName(String userName) {// ⽅法内部实现不考虑缓存逻辑,直接实现业务System.out.println("real query account."+userName);return getFromDB(userName);}@CachePut@CachePut 的作⽤主要针对⽅法配置,能够根据⽅法的请求参数对其结果进⾏缓存,和 @Cacheable 不同的是,它每次都会触发真实⽅法的调⽤@CachePut 作⽤和配置⽅法参数解释examplevalue 缓存的名称,在spring 配置⽂件中定义,必须指定⾄少⼀个@CachePut(value=”my cache”)key 缓存的key,可以为空,如果指定要按照SpEL 表达式编写,如果不指定,则缺省按照⽅法的所有参数进⾏组合@CachePut(value=”testcache”,key=”#userName”)缓存的条件,可以为空,使⽤condition SpEL 编写,返回true 或者false,只有为 true 才进⾏缓存@CachePut(value=”testcache”,condition=”#userName.length()>2”)参数解释example实例@CachePut 注释,这个注释可以确保⽅法被执⾏,同时⽅法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。

Spring3.0 MVC 中文教程

Spring3.0 MVC 中文教程

Spring3 MVC - 3到Spring MVC框架简介Spring3 MVC框架简介Spring MVC是Spring的框架的Web组件。

它提供了丰富的功能,为建设强大的Web应用程序。

Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。

此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。

这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。

比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。

喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。

Spring3.0 MVC系列∙第1部分:到Spring 3.0 MVC框架简介∙第2部分:在Spring 3.0 MVC创建Hello World应用程序∙第3部分:在Spring 3.0 MVC的形式处理∙第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程∙第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse∙第6部分:Spring3 MVC示例教程Spring主题∙第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。

Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。

因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。

相反,它往往是最好直接绑定到业务对象。

请求处理生命周期Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。

Spring_c3p0 配置详解

Spring_c3p0 配置详解

<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
配置一个数据源
Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用这两者中任何一个配置数据源。
DBCP数据源
DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakarta commons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。下面是使用DBCP配置MySql数据源的配置片断:
<property name="maxIdleTime">
<value>60</value>
</property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">
<value>root</value>
</property>
<property name="password">

Spring 3.0.1 中文官方文档

Spring 3.0.1 中文官方文档
5.5.2. 安全对象和AbstractSecurityInterceptor
5.5.2.1. 配置属性是什么?
5.5.2.2. RunAsManager
5.5.2.3. AfterInvocationManager
5.5.2.4. 扩展安全对象模型
5.6. 国际化
6. 核心服务
6.1. The AuthenticationManager , ProviderManager 和AuthenticationProvider s
8.2. ExceptionTranslationFilter
8.2.1. AuthenticationEntryPoint
8.2.2. AccessDeniedHandler
8.3. SecurityContextPersistenceFilteitory
III. web 应用安全
7. 安全过滤器链
7.1. DelegatingFilterProxy
7.2. FilterChainProxy
7.2.1. 绕过过滤器链
7.3. 过滤器顺序
7.4. 使用其他过滤器—— 基于框架
8. 核心安全过滤器
8.1. FilterSecurityInterceptor
8.4. UsernamePasswordAuthenticationFilter
8.4.1. 认证成功和失败的应用流程
9. Basic(基本)和Digest(摘要)验证
9.1. BasicAuthenticationFilter
9.1.1. 配置
9.2. DigestAuthenticationFilter

Spring核心注解

Spring核心注解

Spring注解使⽤场景启始版本模式注解@Repository数据仓储模式注解Spring Framework 2.0 @Component通⽤组件模式注解Spring Framework 2.5 @Service服务模式注解Spring Framework 2.5 @Controller Web控制器模式注解Spring Framework 2.5 @Configuration配置类模式注解Spring Framework 3.0装配注解@ImportResource替换XML元素<import>Spring Framework 2.5 @Import限定@Autowired依赖注⼊范围(导⼊对应的 @Configuration 标识类)Spring Framework 3.0 @ComponentScan扫描制定package下标注Spring模式注解的类Spring Framework 3.1依赖注⼊注解@Autowired Bean依赖注⼊,⽀持多种依赖查找⽅式Spring Framework 2.5 @Qualifier细粒度的@Autowired依赖查找⽅式Spring Framework 2.5 @Resource [JAVA注解]Bean依赖注⼊,仅⽀持名称依赖查找⽅式Spring Framework 2.5 Bean定义注解@Bean替换XML元素<bean/>Spring Framework 3.0 @DependsOn替换XML属性<bean depends-on="..."/>Spring Framework 3.0 @Lazy替代XML属性<bean lazy-init="true|false"/>Spring Framework 3.0 @Primary替换XML属性<bean primary="true|false"/>Spring Framework 3.0 @Role替换XML属性<bean role="..."/>Spring Framework 3.1 @Lookup替代XML属性<bean lookup-method="..."/>Spring Framework 4.1条件装配注解@Profile配置化条件装配Spring Framework 3.1 @Conditional编程条件装配Spring Framework 4.0配置属性注解@PropertySource配置属性抽象PropertySource注解Spring Framework 3.1 @PropertySources@PropertySource集合注解(实现 JAVA 8 @Repeatable相似的功能)Spring Framework 4.0⽣命周期回调注解@PostConstruct替换XML元素<bean init-method="..."/>或InitializingBean Spring Framework 2.5 @PreDestory替换XML元素<bean destory-method="..."/>或 DisposableBean Spring Framework 2.5注解属性注解@AliasFor别名注解属性,实现复⽤的⽬的Spring Framework 4.2性能注解@Indexed提升Spring模式注解的扫描效率(编译时会在classPath下⽣成 META-INF/ponents⽂件)Spring Framework 5.0Spring核⼼注解Spring核⼼注解归类如下:。

SpringBoot注解解析大全(非常全哦!)

SpringBoot注解解析大全(非常全哦!)

SpringBoot注解解析⼤全(⾮常全哦!)使⽤注解的优势:1.采⽤纯java代码,不在需要配置繁杂的xml⽂件2.在配置中也可享受⾯向对象带来的好处3.类型安全对重构可以提供良好的⽀持4.减少复杂配置⽂件的同时亦能享受到springIoC容器提供的功能⼀、注解详解(配备了完善的释义)------(可采⽤ctrl+F 来进⾏搜索哦~~~~也可以收藏⽹页这样以后就不⽤往复查询了哦)@SpringBootApplication:申明让spring boot⾃动给程序进⾏必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

@ResponseBody:表⽰该⽅法的返回结果直接写⼊HTTP response body中,⼀般在异步获取数据时使⽤,⽤于构建RESTful的api。

在使⽤@RequestMapping后,返回值通常解析为跳转路径,加上@esponsebody后返回结果不会被解析为跳转路径,⽽是直接写⼊HTTP response body中。

⽐如异步获取json数据,加上@Responsebody后,会直接返回json数据。

该注解⼀般会配合@RequestMapping⼀起使⽤。

@Controller:⽤于定义控制器类,在spring项⽬中由控制器负责将⽤户发来的URL请求转发到对应的服务接⼝(service层),⼀般这个注解在类中,通常⽅法需要配合注解@RequestMapping。

@RestController:⽤于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。

@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。

@EnableAutoConfiguration:SpringBoot⾃动配置(auto-configuration):尝试根据你添加的jar依赖⾃动配置你的Spring应⽤。

Spring3.0异常处理配置

Spring3.0异常处理配置
Java 代码 1. /** 2. 3. 4. * 基于@ExceptionHandler 异常处理 * @author ZYWANG 2011-4-2 */
5. @Controller 6. public class ExceptionHandlerController { 7. 8. 9. 10. 11. 12. 13. 14. } } @ExceptionHandler(value={IOException.class,SQLException.class}) public String exp(Exception ex,HttpServletRequest request) { request.setAttribute("ex", ex); return "/error.jsp";
从目前的调查结果看,这两种方式不能共存,不知道未来的版本是否能将他们合二为一,这 样才能灵活配置。
基于 HandlerExceptionResolver 接口的异常处理:
使用这种方式只需要实现 resolveException 方法,该方法返回一个 ModelAndView 对象, 在方法内部对异常的类型进行判断,然后常见合适的 ModelAndView 对象,如果该方法返 回了 null,则 Spring 会继续寻找其他的实现了 HandlerExceptionResolver 接口的 Bean。 换句话说,Spring 会搜索所有注册在其环境中的实现了 HandlerExceptionResolver 接口的 Bean,逐个执行,直到返回了一个 ModelAndView 对象。 示例代码:
SimpleMappingExceptionResolver 类, 该类实现了 HandlerExceptionResolver 接口, 需 要使用时只需要使用<bean/>节点进行声明即可,示例如下:

spring配置详解

spring配置详解

spring配置详解1.前⾔公司⽼项⽬的后台,均是基于spring框架搭建,其中还⽤到了log4j.jar等开源架包。

在新项⽬中,则是spring和hibernate框架均有使⽤,利⽤了hibernate框架,来实现持久化,简化sql操作等。

Hibernate配置⽂件可以有两种格式,⼀种是 hibernate.properties,另⼀种是hibernate.cfg.xml。

后者稍微⽅便⼀些,当增加hbm映射⽂件的时候,可以直接在 hibernate.cfg.xml ⾥⾯增加,不必像 hibernate.properties 必须在初始化代码中加⼊。

我们新项⽬中使⽤的是hibernate.cfg.xml格式。

不过在本⽂中不将细述,后续有机会再补上。

公司项⽬中,中间件主要有tomcat,webshpere,WebLogic。

以下,将对项⽬中spring基本配置,log4j的配置,还有中间件的相关参数配置做⼀个初步的介绍。

2.spring配置——以⽼GIS项⽬为例⼦GISV13中的配置涉及到了SpringMVC,IOC,AOP, Quartz⽅⾯的配置。

配置的实现是通过注记配置和XML配置来合作实现。

这⾥,我将按照Spring的配置流程,将其他⼏个⽅⾯的配置融合其中,来进⾏全⾯解析。

2.1SpringMVC的配置2.1.1.web.xml的配置Web程序中,当中间件启动时,中间件会⾸先读取web.xml中的配置。

在web.xml中可以配置监听器,过滤器,servlet映射等等。

在Spring 框架中,我们主要需配置容器初始化时读取的spring容器配置⽂件的路径以及springMVC中的分发器DispatcherServlet。

在GISV13的web.xml中,我们定义了如下内容:InitGISConfigServlet定义了容器启动时,⾸先要运⾏这个⽅法。

然后servletname为MVC的这部分便是定义了springMVC的分发器以及此servlet所对应的加载配置⽂件的路径。

Spring的注解详解

Spring的注解详解

Spring的注解一、 spring注解1、@Autowired注入注解@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装工作。

@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性。

@Autowired是根据类型进行自动装配的。

例如,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常。

如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。

我们可以使用@Qualifier配合@Autowired来解决这些问题。

1.public class TestController {2.3.@Autowired4.@Qualifier(“u serDao”)5.Private UserService userService;6.7.@RequestMapping("/showView")8.public ModelAndView showView(){9.ModelAndView modelAndView = new ModelAndView();10.modelAndView.setViewName("viewName");11.modelAndView.addObject("属性名称","属性值");12.return modelAndView;13.}14.}2、@Resource注入注解JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解。

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource 默认按byName自动注入罢了。

spring3.0MVC注解(附实例)

spring3.0MVC注解(附实例)

0.提示1) Spring发行版本附带了PetClinic 示例,它是一个在简单的表单处理的上下文中,利用了本节中说明的注解支持的Web应用程序。

可以在“samples/petclinic ”目录中找到PetClinic 应用程序。

2) 另外一个建立在基于注解的Web MVC上的示例应用程序,请见imagedb 。

这个示例集中在无状态的multi-action控制器,包括多段文件上传的处理。

可以在“samples/imagedb ”目录找到imagedb 应用程序。

1.建立dispatcher实现注解支持只有对应的HandlerMapping(为了实现类型级别的注解)和/ 或HandlerAdapter(为了实现方法级别的注解)出现在 dispatcher中时, @RequestMapping 才会被处理。

这在DispatcherServlet 和DispatcherPortlet 中都是缺省的行为。

然而,如果是在定义自己的HandlerMappings或HandlerAdapters,就需要确保一个对应的自定义的DefaultAnnotation HandlerMapping和 /或AnnotationMethod HandlerAdapter同样被定义——假设想要使用@RequestMapping 。

例1:雁联zfpt-servlet.xml例2:web.xml2.1 webAppRootKey2.3 log4jConfigLocation2.4 contextConfigLocation2.5 springSecurityFilterChain2.6 Log4jConfigListener2.7 ContextLoaderListener2.8 DispatcherServlet2.9 exception.java例3:雁联web.xml如果你想要自定义映射策略,显式的定义一个DefaultAnnotationHandlerMapping和 /或AnnotationMethodHandlerAdapter也有实际意义。

详解springmvc常用5种注解

详解springmvc常用5种注解

详解springmvc常⽤5种注解⼀、组件型注解:1、@Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。

2、@Repository 对Dao实现类进⾏注解 (特殊的@Component)3、@Service ⽤于对业务逻辑层进⾏注解, (特殊的@Component)4、@Controller ⽤于控制层注解, (特殊的@Component)以上四种注解都是注解在类上的,被注解的类将被spring初始话为⼀个bean,然后统⼀管理。

⼆、请求和参数型注解:1、@RequestMapping:⽤于处理请求地址映射,可以作⽤于类和⽅法上。

●value:定义request请求的映射地址●method:定义地request址请求的⽅式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默认接受get请求,如果请求⽅式和定义的⽅式不⼀样则请求⽆法成功。

●params:定义request请求中必须包含的参数值。

●headers:定义request请求中必须包含某些指定的请求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")说明请求中必须要包含"text/html", "text/plain"这中类型的Content-type头,才是⼀个匹配的请求。

●consumes:定义请求提交内容的类型。

●produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回@RequestMapping(value="/requestTest.do",params = {"name=sdf"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET) public String getIndex(){System.out.println("请求成功");return "index";}上⾯代码表⽰请求的⽅式为GET请求,请求参数必须包含name=sdf这⼀参数,然后请求头中必须有 Accept-Encoding=gzip, deflate, br这个类型头。

3个SpringBoot核心注解,你知道几个?

3个SpringBoot核心注解,你知道几个?

3个SpringBoot核⼼注解,你知道⼏个?Spring Boot 核⼼注解讲解Spring Boot 最⼤的特点是⽆需 XML 配置⽂件,能⾃动扫描包路径装载并注⼊对象,并能做到根据 classpath 下的 jar 包⾃动配置。

所以 Spring Boot 最核⼼的 3 个注解就是:1、@Configurationorg.springframework.context.annotation.Configuration这是 Spring 3.0 添加的⼀个注解,⽤来代替 applicationContext.xml 配置⽂件,所有这个配置⽂件⾥⾯能做到的事情都可以通过这个注解所在类来进⾏注册。

下⾯⼏个相关注解也是⾮常重要的!@Bean⽤来代替 XML 配置⽂件⾥⾯的 <bean ...> 配置。

@ImportResource如果有些通过类的注册⽅式配置不了的,可以通过这个注解引⼊额外的 XML 配置⽂件,有些⽼的配置⽂件⽆法通过 @Configuration ⽅式配置的⾮常管⽤。

@Import⽤来引⼊额外的⼀个或者多个 @Configuration 修饰的配置⽂件类。

@SpringBootConfiguration这个注解就是 @Configuration 注解的变体,只是⽤来修饰是 Spring Boot 配置⽽已,或者可利于 Spring Boot 后续的扩展,源码如下。

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }2、@ComponentScanponentScan这是 Spring 3.1 添加的⼀个注解,⽤来代替配置⽂件中的 component-scan 配置,开启组件扫描,即⾃动扫描包路径下的 @Component 注解进⾏注册 bean 实例到 context 中。

Spring系列之Spring常用注解总结

Spring系列之Spring常用注解总结

Spring系列之Spring常⽤注解总结Spring系列之Spring常⽤注解总结传统的Spring做法是使⽤.xml⽂件来对bean进⾏注⼊或者是配置aop、事物,这么做有两个缺点:1、如果所有的内容都配置在.xml⽂件中,那么.xml⽂件将会⼗分庞⼤;如果按需求分开.xml⽂件,那么.xml⽂件⼜会⾮常多。

总之这将导致配置⽂件的可读性与可维护性变得很低。

2、在开发中在.java⽂件和.xml⽂件之间不断切换,是⼀件⿇烦的事,同时这种思维上的不连贯也会降低开发的效率。

为了解决这两个问题,Spring引⼊了注解,通过"@XXX"的⽅式,让注解与Java Bean紧密结合,既⼤⼤减少了配置⽂件的体积,⼜增加了Java Bean的可读性与内聚性。

不使⽤注解:先看⼀个不使⽤注解的Spring⽰例,在这个⽰例的基础上,改成注解版本的,这样也能看出使⽤与不使⽤注解之间的区别,先定义⼀个⽼虎:package com.spring.model;public class Tiger {private String tigerName="TigerKing";public String toString(){return "TigerName:"+tigerName;}}再定义⼀个猴⼦:package com.spring.model;public class Monkey {private String monkeyName = "MonkeyKing";public String toString(){return "MonkeyName:" + monkeyName;}}定义⼀个动物园:package com.spring.model;public class Zoo {private Tiger tiger;private Monkey monkey;public Tiger getTiger() {return tiger;}public void setTiger(Tiger tiger) {this.tiger = tiger;}public Monkey getMonkey() {return monkey;}public void setMonkey(Monkey monkey) {this.monkey = monkey;}public String toString(){return tiger + "\n" + monkey;}}spring的配置⽂件这么写:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><bean id="zoo" class="com.spring.model.Zoo"><property name="tiger" ref="tiger"/><property name="monkey" ref="monkey"/></bean><bean id="tiger" class="com.spring.model.Tiger"/><bean id="monkey" class="com.spring.model.Monkey"/></beans>测试⽅法:public class TestAnnotation {/*** 不使⽤注解*/@Testpublic void test(){//读取配置⽂件ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext2.xml");Zoo zoo=(Zoo) ctx.getBean("zoo");System.out.println(zoo.toString());}}都很熟悉,权当复习⼀遍了。

Spring中常用的注解及作用

Spring中常用的注解及作用

Spring中常⽤的注解及作⽤@Component(value)配置类,当使⽤该注解时,SpringIOC会将这个类⾃动扫描成⼀个bean实例不写的时候,默认是类名,且⾸字母⼩写@ComponentScan默认是代表进⾏扫描当前包含有两个参数:basePackages:可以扫描多个包,是⼀个数组类型,可能会造成产⽣多个Bean实例basePackageClasses:可以扫描多个⽅法,是⼀个数组类型,可能会造成产⽣多个Bean实例@Autowired⾃动装配,会根据类型寻找指定的Bean,required:表⽰假如说在bean⽬录下找不到指定的注解还需不需要注⼊,默认是true 修改为false 时,表⽰假如说没有找到可以允许不注⼊。

@Primary表⽰当通过⼀个接⼝或者抽象类注⼊时,存在多个实现类,那么使⽤该注解可以告诉IOC,优先注⼊Parmary修饰的@Qualifier假如说按名称查询指定的⽅法时,采⽤Qulifier(⽅法名)@Bean当使⽤该注解时,SpringIOC会将这个⽅法⾃动扫描成⼀个bean实例不写的时候,默认是⽅法名,且⾸字母⼩写可以使⽤bean 中设置name(bean的名字),autowire是否是⼀个引⽤的Bean⽅法默认值Autowire.NO,initMothed初始化⽅法,destroyMethod销毁⽅法@Scope可以是⽤该该注解设置多个bean对象@ImportResource({"classpath:xxx.xml"})能够读取多个xml⽂件,这样就可以引⼊多个xml定义的bean@Import({xx.class,xxx.class})能够读取多个class⽂件@Profile使⽤该注解可以给spring配置多个数据源连接池对象在bean中配置时,可以使⽤<beans profile="数据源1"></beans><beans profile="数据源2"></beans>1.在类中配置,使⽤时,需要在指定的类中激活@ActiveProfiles("数据源1")2.在虚拟中配置3.在web.xml⽂件中配置<init-param><param-name>spring.profiles.active</param-name><param-name>数据源1</param-name></init-param><init-param><param-name>spring.profiles.active</param-name><param-name>数据源2</param-name></init-param>还有两种加载配置⽂件:使⽤注解:@PropertySource(value="classpath:xxx")使⽤xml⽂件配置 <context:property-placeholder location="classpath:db.properties"/>@Contional({xx.class})(了解)可以条件化,装配bean;@Value("#{xxx}")可以直接给属性赋值也可以直接给bean元素赋值。

SpringBoot中常用注解及各种注解作用

SpringBoot中常用注解及各种注解作用

SpringBoot中常⽤注解及各种注解作⽤本篇⽂章将介绍⼏种SpringBoot 中常⽤注解其中,各注解的作⽤为:@PathVaribale 获取url中的数据@RequestParam 获取请求参数的值@GetMapping 组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写@RestController是@ResponseBody和@Controller的组合注解。

@PathVaribale 获取url中的数据看⼀个例⼦,如果我们需要获取Url=localhost:8080/hello/id中的id值,实现代码如下:@RestControllerpublic class HelloController {@RequestMapping(value="/hello/{id}",method= RequestMethod.GET)public String sayHello(@PathVariable("id") Integer id){return "id:"+id;}}@RequestParam 获取请求参数的值直接看⼀个例⼦,如下@RestControllerpublic class HelloController {@RequestMapping(value="/hello",method= RequestMethod.GET)public String sayHello(@RequestParam("id") Integer id){return "id:"+id;}}在浏览器中输⼊地址:localhost:8080/hello?id=1000,可以看到如下的结果:当我们在浏览器中输⼊地址:localhost:8080/hello?id ,即不输⼊id的具体值,此时返回的结果为null。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用 @Repository、@Service、@Controller 和 @Component 将类标识为 BeanSpring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。

@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。

具体只需将该注解标注在 DAO 类上即可。

同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用 Bean的自动扫描功能,这可以通过 <context:component-scan/> 实现。

如下所示:// 首先使用 @Repository 将 DAO 类声明为 Beanpackage bookstore.dao;@Repositorypublic class UserDaoImpl implements UserDao{ …… }// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能<beans … >……<context:component-scan base-package=”bookstore.dao” />……</beans>如此,我们就不再需要在 XML 中显式使用 <bean/> 进行 Bean 的配置。

Spring 在容器初始化时将自动扫描base-package 指定的包及其子包下的所有 class 文件,所有标注了 @Repository 的类都将被注册为SpringBean。

为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。

Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

Spring 2.5 在 @Repository 的基础上增加了功能类似的额外三个注解:@Component、@Service、@Constroller,它们分别用于软件系统的不同层次:•@Component是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。

•@Service通常作用在业务层,但是目前该功能与 @Component 相同。

•@Constroller通常作用在控制层,但是目前该功能与 @Component 相同。

通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring 会自动创建相应的BeanDefinition 对象,并注册到 ApplicationContext 中。

这些类就成了 Spring受管组件。

这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。

另外,除了上面的四个注解外,用户可以创建自定义的注解,然后在注解上标注 @Component,那么,该自定义注解便具有了与所 @Component 相同的功能。

不过这个功能并不常用。

当一个 Bean 被自动检测到时,会根据那个扫描器的 BeanNameGenerator 策略生成它的 bean名称。

默认情况下,对于包含 name 属性的 @Component、@Repository、 @Service 和 @Controller,会把name 取值作为 Bean 的名字。

如果这个注解不包含 name 值或是其他被自定义过滤器发现的组件,默认 Bean名称会是小写开头的非限定类名。

如果你不想使用默认 bean 命名策略,可以提供一个自定义的命名策略。

首先实现 BeanNameGenerator接口,确认包含了一个默认的无参数构造方法。

然后在配置扫描器时提供一个全限定类名,如下所示:<beans ...><context:component-scanbase-package="a.b" name-generator="a.SimpleNameGenerator"/></beans>与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的Bean,其默认作用域是"singleton",为了配合这四个注解,在标注 Bean 的同时能够指定 Bean 的作用域,Spring 2.5引入了 @Scope 注解。

使用该注解时只需提供作用域的名称就行了,如下所示:@Scope("prototype")@Repositorypublic class Demo { … }如果你想提供一个自定义的作用域解析策略而不使用基于注解的方法,只需实现 ScopeMetadataResolver 接口,确认包含一个默认的没有参数的构造方法。

然后在配置扫描器时提供全限定类名:<context:component-scan base-package="a.b"scope-resolver="footmark.SimpleScopeResolver" />--------------------------------------------------------------------------------回页首使用 @PostConstruct 和 @PreDestroy 指定生命周期回调方法Spring Bean 是受 Spring IoC 容器管理,由容器进行初始化和销毁的(prototype类型由容器初始化之后便不受容器管理),通常我们不需要关注容器对 Bean 的初始化和销毁操作,由 Spring 经过构造函数或者工厂方法创建的Bean就是已经初始化完成并立即可用的。

然而在某些情况下,可能需要我们手工做一些额外的初始化或者销毁操作,这通常是针对一些资源的获取和释放操作。

Spring 1.x 为此提供了两种方式供用户指定执行生命周期回调的方法。

第一种方式是实现 Spring 提供的两个接口:InitializingBean 和 DisposableBean。

如果希望在 Bean 初始化完成之后执行一些自定义操作,则可以让 Bean 实现 InitializingBean 接口,该接口包含一个afterPropertiesSet() 方法,容器在为该 Bean 设置了属性之后,将自动调用该方法;如果 Bean 实现了DisposableBean 接口,则容器在销毁该 Bean 之前,将调用该接口的 destroy() 方法。

这种方式的缺点是,让 Bean类实现 Spring 提供的接口,增加了代码与 Spring 框架的耦合度,因此不推荐使用。

第二种方式是在 XML 文件中使用 <bean> 的 init-method 和 destroy-method属性指定初始化之后和销毁之前的回调方法,代码无需实现任何接口。

这两个属性的取值是相应 Bean类中的初始化和销毁方法,方法名任意,但是方法不能有参数。

示例如下:<bean id=”userService”class=”erService”init-method=”init” destroy-method=”destroy”>…</bean>Spring 2.5 在保留以上两种方式的基础上,提供了对 JSR-250 的支持。

JSR-250规范定义了两个用于指定声明周期方法的注解:@PostConstruct 和@PreDestroy。

这两个注解使用非常简单,只需分别将他们标注于初始化之后执行的回调方法或者销毁之前执行的回调方法上。

由于使用了注解,因此需要配置相应的Bean 后处理器,亦即在 XML 中增加如下一行:<context:annotation-config />比较上述三种指定生命周期回调方法的方式,第一种是不建议使用的,不但其用法不如后两种方式灵活,而且无形中增加了代码与框架的耦合度。

后面两种方式开发者可以根据使用习惯选择其中一种,但是最好不要混合使用,以免增加维护的难度。

--------------------------------------------------------------------------------回页首使用 @Required 进行 Bean 的依赖检查依赖检查的作用是,判断给定 Bean 的相应 Setter 方法是否都在实例化的时候被调用了。

而不是判断字段是否已经存在值了。

Spring进行依赖检查时,只会判断属性是否使用了 Setter 注入。

如果某个属性没有使用 Setter注入,即使是通过构造函数已经为该属性注入了值,Spring 仍然认为它没有执行注入,从而抛出异常。

另外,Spring 只管是否通过 Setter执行了注入,而对注入的值却没有任何要求,即使注入的 <null/>,Spring 也认为是执行了依赖注入。

<bean> 标签提供了 dependency-check 属性用于进行依赖检查。

该属性的取值包括以下几种:•none -- 默认不执行依赖检查。

可以在 <beans> 标签上使用 default-dependency-check 属性改变默认值。

•simple -- 对原始基本类型和集合类型进行检查。

•objects -- 对复杂类型进行检查(除了 simple 所检查类型之外的其他类型)。

•all -- 对所有类型进行检查。

旧版本使用 dependency-check 在配置文件中设置,缺点是粒度较粗。

使用 Spring2.0 提供的 @Required 注解,提供了更细粒度的控制。

@Required 注解只能标注在 Setter 方法之上。

因为依赖注入的本质是检查 Setter方法是否被调用了,而不是真的去检查属性是否赋值了以及赋了什么样的值。

如果将该注解标注在非 setXxxx() 类型的方法则被忽略。

为了让 Spring 能够处理该注解,需要激活相应的 Bean 后处理器。

要激活该后处理器,只需在 XML 中增加如下一行即可。

<context:annotation-config/>当某个被标注了 @Required 的 Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提醒开发者对相应属性进行设置。

相关文档
最新文档