- 浏览: 229893 次
- 性别:
- 来自: 武汉
最新评论
-
spp_1987:
org.springframework.beans.facto ...
Hibernate4之多对多双向关联 -
spp_1987:
后台保存订单下面 有很多订单 调了 对应什么方法 实现的?
Hibernate4之多对多双向关联 -
spp_1987:
订单 和 商品之间 有中间表存在吗???
Hibernate4之多对多双向关联 -
spp_1987:
跟 官方 hibernate4.2.5提供 的 manytom ...
Hibernate4之JPA规范配置详解 -
zhuguopei_java:
谢谢。楼主你这是解释源码吗
Struts2中action接收参数的三种方法及ModelDriven和Preparable接口结合JAVA反射机制的灵活用法
<context:component-scan>标签将自动开启“注解实现Bean依赖注入”支持。标签来表示需要要自动注册Bean定义,而通过base-package属性指定扫描的类路径位置。
<aop:aspectj-autoproxy/>用于开启Spring对@AspectJ风格切面的支持。
Spring自带的@Component注解及扩展:@Repository、@Service、@Controller
@ManagedBean注解及自定义扩展:@ManagedBean注解,需要在应用服务器环境使用(如Jboss),自定义扩展部分是为了配合Spring自带的模式注解扩展自定义的,并不包含在Java EE 6规范中,在Java EE 6中相应的服务层、DAO层功能由EJB来完成。
@Named注解及自定义扩展,允许放置在类型、字段、方法参数上:
@ManagedBean和@Named用法可以参考博客:http://jinnianshilongnian.iteye.com/blog/1461055
常用的Bean的配置元数据:@Lazy,@DependsOn,@Scope,@Qualifier,@Primary
常用依赖注入注解:@Autowired:自动装配,@Value:注入SpEL表达式,@Qualifier:限定描述符,@Resource:自动装配,@PostConstruct和PreDestroy:通过注解指定初始化和销毁方法定义;
@AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,而@Aspect注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成,示例如下:
细粒度控制Bean定义扫描
在XML配置中完全消除了Bean定义,而是只有一个<context:component-scan>标签来支持注解Bean定义扫描。
前边的示例完全采用默认扫描设置,如果我们有几个组件不想被扫描并自动注册、我们想更改默认的Bean标识符生成策略该如何做呢?接下来让我们看一下如何细粒度的控制Bean定义扫描,具体定义如下:
默认情况下将自动扫描@Component、@ManagedBean、@Named注解的类并将其注册为Spring管理Bean,可以通过在<context:component-scan>标签中指定自定义过滤器将扫描到匹配条件的类注册为Spring管理Bean,过滤器用里面的<context:include-filter />标签来定义:
一般情况下没必要进行自定义过滤,如果需要请参考博客:
http://jinnianshilongnian.iteye.com/blog/1461055
基于Java类定义Bean配置元数据
基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件。
基于Java类定义Bean配置元数据中的@Configuration注解的类等价于XML配置文件,@Bean注解的方法等价于XML配置文件中的Bean定义。
基于Java类定义Bean配置元数据需要通过AnnotationConfigApplicationContext加载配置类及初始化容器,类似于XML配置文件需要使用ClassPathXmlApplicationContext加载配置文件及初始化容器。
这种用法是Spring3.X的新特性,但是用起来还是没有注解或者XML形式的直观,不建议使用,而且在WEB应用中还需要特别去修改web.xml文件。具体用法请参考博客:
http://jinnianshilongnian.iteye.com/blog/1463704
<aop:aspectj-autoproxy/>用于开启Spring对@AspectJ风格切面的支持。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-lazy-init="true"> <context:annotation-config /> <context:component-scan base-package="com.chou.spring.bean"/> <aop:aspectj-autoproxy proxy-target-class="true" /> <bean id="myBeanAA" class="com.chou.spring.bean.MyBeanA" /> </beans>
//main方法 ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext-an.xml"); MyBeanB b = cxt.getBean("myBeanB",MyBeanB.class); b.domain();
Spring自带的@Component注解及扩展:@Repository、@Service、@Controller
@ManagedBean注解及自定义扩展:@ManagedBean注解,需要在应用服务器环境使用(如Jboss),自定义扩展部分是为了配合Spring自带的模式注解扩展自定义的,并不包含在Java EE 6规范中,在Java EE 6中相应的服务层、DAO层功能由EJB来完成。
@Named注解及自定义扩展,允许放置在类型、字段、方法参数上:
@ManagedBean和@Named用法可以参考博客:http://jinnianshilongnian.iteye.com/blog/1461055
常用的Bean的配置元数据:@Lazy,@DependsOn,@Scope,@Qualifier,@Primary
常用依赖注入注解:@Autowired:自动装配,@Value:注入SpEL表达式,@Qualifier:限定描述符,@Resource:自动装配,@PostConstruct和PreDestroy:通过注解指定初始化和销毁方法定义;
@Repository public class MyBeanB implements MyBean{ protected static final Log logger = LogFactory.getLog(MyBeanB.class); @PostConstruct public void MyInit(){ logger.info("[INFO]...MyBeanB is initing...", null); } @PreDestroy public void Mydestory() { logger.info("[INFO]...MyBeanB is destorying...", null); } /** * @Autowired 默认byType进行自动装配,可以用于构造器、字段、方法注入 * 且必须有一个Bean候选者注入,如果允许出现0个Bean候选者需要设置属性“required=false”, * “required”属性含义和@Required一样,只是@Required只适用于基于XML配置的setter注入方式。 * * @Resource 默认如果name和type属性都不指定,将先byName自动装配,找不到再byType * 如果配置了name属性,使用byName进行自动装配,而使用type时则使用byType进行装配 * 如果同时指定name和type,则从容器中找唯一匹配的bean装配,找不到抛出异常 * * @Resource 注解应该只用于setter方法注入和字段属性注入,不能提供如@Autowired多参数方法注入; * @Resource 首先将从JNDI环境中查找资源,如果没找到默认再到Spring容器中查找, * 因此如果JNDI环境中有和Spring容器同名的资源时需要注意。 */ //@Resource //注意这里是javax.annotation.Resource private MyBeanA bean; @Autowired(required = true) public void setBean(@Qualifier("myBeanAA") MyBeanA myBean) { //@Qualifier用于按类型自动装配时有多个同类型的bean时,规定选择某一个名称的bean this.bean = myBean; } public void domain(){ System.out.println("MyBeanB is executing..."); bean.domain(); bean.sayAround("haha"); //throw new RuntimeException("This is a RuntimeException"); } }
@Component("myBeanA")//初始化bean的名字默认是类名第一个字母小写 //@Controller 表示层 //@Service //业务逻辑层 //@Repository //数据访问层 //@Lazy(false) //延迟初始化 //@DependsOn("myBeanB") ////定义Bean初始化及销毁时的顺序 //@Scope("prototype") //默认单例singleton //@Primary //自动装配时当出现多个Bean候选者时,将作为首选者 public class MyBeanA{ protected static final Log logger = LogFactory.getLog(MyBeanA.class); @PostConstruct public void MyInit(){//bean初始化之前调用的方法,等同于xml配置的init-method logger.info("[INFO]...MyBeanA is initing...", null); } @PreDestroy public void Mydestory() {//bean销毁之前调用的方法,等同于xml配置的destroy-method logger.info("[INFO]...MyBeanA is destorying...", null); } //@Value用于注入SpEL表达式,可以放置在字段方法或参数上 @Value(value = "#{'Hello Spring!!!'[0]}") private String myName; @Value("#{100}") private Long myAge; private Map<String, String> resultMap; @Value("abc") private String arg1; @Value("101") private Long arg2; @Value("#{1==1 ? true : false}") private Boolean b1; @Value("#{'no'}") private Boolean b2; @Value("#{'on'}") private Boolean b3; @Value("#{@systemProperties}") private Properties pros; @Value("#{ new double[]{100,44,3.1415,0.4432} }") private Double[] nums; public void domain() { System.out.println("MyBeanA is executing..."); for (int i = 0; i < nums.length; i++) { System.out.println(nums[i]); } System.out.println(pros.getProperty("os.name")); //System.out.println(System.getProperties()); System.out.println(b1); System.out.println(b2); System.out.println(b3); System.out.println(arg1); System.out.println(arg2); System.out.println(myName); System.out.println(myAge); if (resultMap != null) { System.out.println(resultMap.values()); } } public void sayAround(String param) { System.out.println("around param:" + param); } //依赖检查必须是set方法上,并通过xml文件的property属性注入 //@Required 表示一定要有property属性注入,很少用到 public void setResultMap(Map<String, String> resultMap) { this.resultMap = resultMap; } }
@AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,而@Aspect注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成,示例如下:
@Aspect @Component public class Interceptor { @Pointcut("execution ( public * com.chou.spring.bean..*.domain(..))") public void myPointcut() {} @Before("myPointcut()") public void beforeDomain() { System.out.println("This is beforeDomain...."); } @AfterReturning("execution ( public * com.chou.spring.bean.MyBeanA.domain(..))") public void afterReturning() { System.out.println("This is afterReturning...."); } @AfterThrowing("myPointcut()") public void afterThrowing() { System.out.println("This is afterThrowing...."); } @After("myPointcut()") public void afterDomain() { System.out.println("This is afterDomain...."); } @Around("execution(* com.chou.spring.bean..*.sayAround(..))") public Object around(ProceedingJoinPoint pjp) throws Throwable { System.out.println("===========around before advice"); Object retVal = pjp.proceed(new Object[] {"【环绕通知】"}); System.out.println("===========around after advice"); return retVal; } }
细粒度控制Bean定义扫描
在XML配置中完全消除了Bean定义,而是只有一个<context:component-scan>标签来支持注解Bean定义扫描。
前边的示例完全采用默认扫描设置,如果我们有几个组件不想被扫描并自动注册、我们想更改默认的Bean标识符生成策略该如何做呢?接下来让我们看一下如何细粒度的控制Bean定义扫描,具体定义如下:
<context:component-scan base-package="" resource-pattern="**/*.class" name-generator="org.springframework.context.annotation.AnnotationBeanNameGenerator" use-default-filters="true" annotation-config="true"> <context:include-filter type="aspectj" expression=""/> <context:exclude-filter type="regex" expression=""/> </context:component-scan>
- base-package:表示扫描注解类的开始位置,即将在指定的包中扫描,其他包中的注解类将不被扫描,默认将扫描所有类路径;
- resource-pattern:表示扫描注解类的后缀匹配模式,即“base-package+resource-pattern”将组成匹配模式用于匹配类路径中的组件,默认后缀为“**/*.class”,即指定包下的所有以.class结尾的类文件;
- name-generator:默认情况下的Bean标识符生成策略,默认是AnnotationBeanNameGenerator,其将生成以小写开头的类名(不包括包名);可以自定义自己的标识符生成策略;
- use-default-filters:默认为true表示扫描@Component、@ManagedBean、@Named注解的类,如果改为false默认将不扫描这些默认的注解来定义Bean,即这些注解类不能被扫描到,即不能通过这些注解进行Bean定义;
- annotation-config:表示是否自动支持注解实现Bean依赖注入,默认支持,如果设置为false,将关闭支持注解的依赖注入,需要通过<context:annotation-config/>开启。
默认情况下将自动扫描@Component、@ManagedBean、@Named注解的类并将其注册为Spring管理Bean,可以通过在<context:component-scan>标签中指定自定义过滤器将扫描到匹配条件的类注册为Spring管理Bean,过滤器用里面的<context:include-filter />标签来定义:
<context:include-filter type="aspectj" expression=""/> <context:exclude-filter type="regex" expression=""/>
- <context:include-filter>:表示扫描到的类将被注册为Spring管理Bean;
- <context:exclude-filter>:表示扫描到的类将不被注册为Spring管理Bean,它比<context:include-filter>具有更高优先级;
- type:表示过滤器类型,目前支持注解类型、类类型、正则表达式、aspectj表达式过滤器,当然也可以自定义自己的过滤器,实现org.springframework.core.type.filter.TypeFilter即可;
- expression:表示过滤器表达式。
一般情况下没必要进行自定义过滤,如果需要请参考博客:
http://jinnianshilongnian.iteye.com/blog/1461055
基于Java类定义Bean配置元数据
基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件。
基于Java类定义Bean配置元数据中的@Configuration注解的类等价于XML配置文件,@Bean注解的方法等价于XML配置文件中的Bean定义。
基于Java类定义Bean配置元数据需要通过AnnotationConfigApplicationContext加载配置类及初始化容器,类似于XML配置文件需要使用ClassPathXmlApplicationContext加载配置文件及初始化容器。
这种用法是Spring3.X的新特性,但是用起来还是没有注解或者XML形式的直观,不建议使用,而且在WEB应用中还需要特别去修改web.xml文件。具体用法请参考博客:
http://jinnianshilongnian.iteye.com/blog/1463704
发表评论
-
Spring3整合远程服务之Remoting
2012-09-14 17:24 0Remoting实际上是一种企业分布式计算的组件。在同一服务器 ... -
Spring3核心技术之事务管理机制
2012-09-13 23:37 9407Spring对事务的解决办法 ... -
Spring3整合WebService之Xfire
2012-09-05 23:18 0Spring集成- WebService EJB JMS JM ... -
Spring3整合定时器之Quartz
2012-09-14 21:06 2550说到定时器,一定会想到Timer,但是他只能简单的进行时间单 ... -
Spring3整合邮件之JavaMail
2012-09-16 12:44 4222Spring3整合JavaMail只需要往Spring工程里面 ... -
Spring3整合ORM框架之MyBatis
2012-09-05 23:15 0Spring3整合之MyBatis -
Spring3整合ORM框架之Hibernate
2012-09-05 23:15 0Spring3整合之Hibernate+JPA -
Spring3核心技术之AOP配置
2012-09-04 15:07 11665在Spring配置文件中,所 ... -
Spring3新特性之表达式语言SpEL
2012-08-30 16:01 4534概述 Spring表达式语言全称为“Spring ... -
Spring3外部资源访问之Resource接口
2012-08-30 14:07 2143概述 在日常程 ... -
Spring3核心技术之JdbcTemplate
2012-09-07 11:05 13373Spring对JDBC的支持 Spring通过抽 ... -
Spring3之Bean的作用域
2012-08-30 11:11 1797作用域即“scope”,在面向对象程序设计中一般指对象或变量 ... -
Spring3之Bean的自动装配
2012-08-30 10:32 3448自动装配就是指由Spring ... -
Spring3核心技术之DI依赖注入
2012-08-29 15:12 2237IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的 ... -
Spring3核心技术之AOP动态代理
2012-09-03 17:35 2271在进行AOP开发前,先熟 ... -
Spring3之Bean基本配置和生命周期
2012-08-30 10:15 1932Bean的概念 由IoC容器管理的那些组成你应用程序的对象我们 ... -
Spring3核心技术之IOC控制反转
2012-08-28 19:36 1822个人觉得Spring用起来其实简单,但是如果想真正弄懂原理和思 ...
相关推荐
Spring 3.0 是一个重要的版本,它引入了大量的注解,极大地简化了Spring框架的配置,使得开发人员能够更加专注于业务逻辑,而不再是XML配置。本文将深入解析Spring 3.0中的主要注解,帮助你更好地理解和使用它们。 ...
Spring 3.x 注解应用详解 Spring 3.x 框架引入了依赖注入的注解,改变了传统的 XML 配置方式,提供了一种更加灵活和方便的依赖配置方式。下面对 Spring 3.x 的注解应用进行详细的介绍。 一、属性装配 在 Spring ...
本篇将深入讲解如何通过注解来配置Spring AOP,以实现更加简洁、高效的代码编写。 首先,我们来看注解在Spring AOP中的应用。在传统的AOP配置中,我们需要定义切入点表达式和通知(advice)在XML配置文件中。然而,...
Spring 3.0 是一个里程碑式的版本,引入了大量的新特性,其中注解注入是其核心改进之一。注解注入使得代码更加简洁,减少了XML配置,提高了开发效率。在这个专题里,我们将深入探讨Spring 3.0中的注解注入机制。 ...
【Spring注解使用详解】 Spring框架自2.5版本开始,引入了注解配置,使得开发者可以在不依赖XML配置文件的情况下实现Bean的定义和依赖注入。注解配置因其简洁、直观的特点,逐渐成为主流的配置方式。在本文中,我们...
`applicationContext.xml`是Spring容器使用的主配置文件之一,用于定义Spring中的Bean以及它们之间的依赖关系。 #### 三、applicationContext.xml详解 **1. 文件结构** ```xml <!-- 头文件,定义XML版本及编码 --...
# Spring 3 注解详解 在 Spring 3 中,注解成为了主要的配置方式,极大地简化了应用程序的配置。本文将详细介绍几个关键的注解,包括 @Autowired、@Qualifier、@Resource 和 @PostConstruct,以及它们在实际开发中...
Spring Security可以使用XML配置、Java配置或注解配置。XML配置是最传统的,但在现代项目中,Java配置和注解配置更受欢迎,因为它们更加直观且易于维护。 5. **Spring Security与Spring Boot集成**: 在Spring ...
这个整合项目是基于Spring 3.0.5、Spring MVC 3和MyBatis 3.0.2版本,采用注解方式进行配置,简化了XML配置文件,提高了开发效率。 Spring MVC是Spring框架的一部分,主要负责Web请求的处理。在本项目中,通过注解...
使用 Spring 2.5 基于注解驱动的 Spring MVC 详解 本文将介绍 Spring 2.5 新增的 Spring MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 Spring MVC 注解驱动 在 Spring 2.5 中,...
在Spring框架中,`applicationContext.xml`是应用上下文配置文件,它是整个Spring应用的核心,用于定义bean的创建、依赖关系以及配置。下面将详细解释配置文件中的各个部分。 首先,XML头文件定义了编码方式,`...
### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...
在Spring框架中,`@Component`注解是核心的组件注解之一,它标志着一个类作为Spring IoC容器中的Bean。这个注解及其派生注解(如`@Service`、`@Repository`和`@Controller`)是Spring依赖注入(Dependency Injection...
在Spring框架中,注解是实现依赖注入和简化配置的关键工具。本文将深入解析Spring中最常用的七大注解:`@Required`、`@Autowired`、`@Qualifier`、`@Configuration`、`@ComponentScan`、`@Lazy`和`@Value`,以及它们...
在Spring框架中,事务管理是核心功能之一,它为应用程序提供了强大的事务控制能力,确保了数据的一致性和完整性。本文将深入探讨Spring中的几种事务配置方式,帮助开发者更好地理解和运用。 1. **编程式事务管理** ...
SpringAOP中的注解配置详解 ...SpringAOP中的注解配置详解是实现AOP功能的重要技术之一,它提供了一种灵活、可扩展的方式来拦截和扩展业务逻辑。通过使用注解和XML配置,开发者可以轻松地实现对业务逻辑的拦截和扩展。
Spring MVC 配置详解 Spring MVC 是一个基于 DispatcherServlet 的 MVC 框架,它是当前主流的 Web 框架之一。要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC ...
### Spring 2.x 配置详解 #### 关于 Spring 配置 自 Spring 2.0 起,推荐使用基于 XML Schema 的配置方式,这种方式比传统的 DTD 基础配置更为灵活。一个典型的 Spring 2.5 配置文件至少会包含以下结构: ```xml ...
1. 使用简化配置:Spring注解的主要目标就是减少XML配置,将bean定义和依赖注入等操作直接写在类或方法上。通过这种方式,开发者可以更加直观地了解类的职责和依赖关系,同时降低了维护成本。 2. 使用Bean定义注解...