- 浏览: 1249476 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
Spring2.0以后的版本中,引入了基于注解(Annotation)的配置。注解是JDK1.5的一个新特性。XML配置灵活。注解和XML可以配合使用。
1. Spring的注解支持:
在spring的配置文件中引入context的Schema命名空间,并添加注解配置标签:
实例:
beans-context.xml
测试方法:
输出为null。
在beans-context.xml中添加
重新测试,输出不为null
2. Spring扫描包:
如果有很多的包和类,在XML文件中配置稍显繁杂,且要控制哪些包或类需要由Spring实例化时,可以使用包扫描方式。
扫描后,放入spring容器,交由spring管理
支持添加移除子包
说明:
如何剔除一部分包,并保留其它的包:
a. 使用aspect的语法,将剔除和包括放在一个filter表达式里面:
支持下面几种语法:
测试:
component-scan-test.xml
注意:
如果类型为regex,'\'为转义符,'.'代表任意字符,'*'表明前面的字符出现0或多次,'..'在这里并不代表子包。
类型为aspectj,'\','.','*'都代表自己本身,'..'代表子包
3. 属性注入方式:
@Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@Autowired
默认按类型装配
4. bean的作用域
默认的作用域为singleton
可以在xml中配置bean的scope属性为prototype,或Bean上加@Scope("prototype")注解,这样每次getBean拿到的都是新创建的实例:
如:
1. Spring的注解支持:
在spring的配置文件中引入context的Schema命名空间,并添加注解配置标签:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 隐式注册了多个对注解进行解析处理的处理器,如@Autowired, @Required等注解。--> <!-- AutowiredAnnotationBeanPostProcessor - 处理@Autowire --> <!-- CommonAnnotationBeanPostProcessor - 处理@Resource --> <!-- PersistenceAnnotationBeanPostProcessor - 处理@PersistenceContext, @PersistenceUnit --> <!-- RequiredAnnotationBeanPostProcessor - 处理@Required --> <context:annotation-config/> <!-- 注解驱动自动注入,不会驱动bean定义 --> </beans>
实例:
public class Jurisdiction { public void juristic() { System.out.println("juristic() is executed!"); } }
public class Vegeterian { @Autowired Jurisdiction jurisdiction; public void maigre() { System.out.println(jurisdiction); } }
beans-context.xml
<beans> <bean id="jurisdiction" class="com.john.spring.context.Jurisdiction" /> <bean id="vegeterian" class="com.john.spring.context.Vegeterian" /> </beans>
测试方法:
@Test public void testAnnotationConfig() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans-context.xml"); Vegeterian vegeterian = ctx.getBean("vegeterian", Vegeterian.class); vegeterian.maigre(); }
输出为null。
在beans-context.xml中添加
<beans> <context:annotation-config /> </beans>
重新测试,输出不为null
2. Spring扫描包:
如果有很多的包和类,在XML文件中配置稍显繁杂,且要控制哪些包或类需要由Spring实例化时,可以使用包扫描方式。
扫描后,放入spring容器,交由spring管理
<beans> <!-- base-package:扫描该包及子包下面的类,实现自动注入 --> <!-- 注解驱动bean定义,同时驱动自动注入 --> <!-- 隐式注册<context:annotation-config />,所以<context:annotation-config />可以移除 --> <context:component-scan base-package="com.john"> </context:component-scan> </beans>
支持添加移除子包
<beans> <context:component-scan base-package="com.john"> <context:include-filter /> <context:exclude-filter /> </context:component-scan> </beans>
说明:
1. exclude-filter先于include-filter解析,include-filter不会包括被exclude-filter剔除的包
2. include-filter在exclude-filter之后定义会报SAXException异常
如何剔除一部分包,并保留其它的包:
a. 使用aspect的语法,将剔除和包括放在一个filter表达式里面:
<beans> <context:component-scan base-package="com.jemmy.spring.biz.ext" use-default-filters="true"> <context:exclude-filter type="aspectj" expression="com.jemmy.spring..*Impl && !com.jemmy.spring.biz.ext.impl.CouponBizImpl" /> </context:component-scan> </beans>
支持下面几种语法:
Filter Type | Example Expression | Description |
annotation | org.example.SomeAnnotation | 标注有SomeAnnotation的类 |
custom | org.example.MyTypeFilter | Spring3新增自定义过滤器,实现org.springframework.core.type.TypeFilter接口 |
测试:
@Controller public class MyController { } @Service public class MyService { }
component-scan-test.xml
<beans> <context:component-scan base-package="com.jemmy.spring.core.context"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> </beans>
public class ComponentScanTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring/core/context/component-scan-test.xml"); //MyController myController = context.getBean("myController", MyController.class); MyService myService = context.getBean("myService", MyService.class); } }
注意:
如果类型为regex,'\'为转义符,'.'代表任意字符,'*'表明前面的字符出现0或多次,'..'在这里并不代表子包。
类型为aspectj,'\','.','*'都代表自己本身,'..'代表子包
3. 属性注入方式:
@Resource
默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@Autowired
默认按类型装配
4. bean的作用域
1. singleton
2. prototype
3. request
4. session
默认的作用域为singleton
可以在xml中配置bean的scope属性为prototype,或Bean上加@Scope("prototype")注解,这样每次getBean拿到的都是新创建的实例:
如:
<beans> <bean class="com.jemmy.spring.core.scope.SingletonBean" /> <bean class="com.jemmy.spring.core.scope.PrototypeBean" scope="prototype" /> </beans>
public class SingletonBean { } public class PrototypeBean { } public class ScopeTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring/core/scope/scope-test.xml"); SingletonBean singleton1 = context.getBean(SingletonBean.class); SingletonBean singleton2 = context.getBean(SingletonBean.class); System.out.println(singleton1 == singleton2); // true PrototypeBean prototype1 = context.getBean(PrototypeBean.class); PrototypeBean prototype2 = context.getBean(PrototypeBean.class); System.out.println(prototype1 == prototype2); // false } }
发表评论
-
本地事务系列之五:使用Transactional注解
2014-08-02 18:16 2838AOP的配置稍显复杂,通过@Transactional注解,同 ... -
本地事务系列之四:使用AOP
2014-08-02 17:08 908Spring AOP通过在文件中配置来管理事务,好处是对代码侵 ... -
本地事务系列之三:使用TransactionTemplate
2014-07-17 22:15 6781TransactionTemplate的灵活性好,可以给代码块 ... -
本地事务系列之二:使用PlatformTransactionManager
2014-07-17 21:37 5409Spring的事务管理器接口: public interf ... -
本地事务系列之一:JDBC操作
2014-07-08 23:04 1240本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看 ... -
Spring AOP 源码系列:ProxyFactoryBean
2014-04-21 18:01 0public class ProxyFactoryBean ... -
Spring AOP 源码系列
2014-04-21 09:22 0Spring AOP通过JDK的正则表达式对Pointcut表 ... -
Spring AOP系列之五:后置通知
2014-04-14 08:59 1681和前置通知类似, 通过实现org.springframewor ... -
Spring AOP系列之四:前置通知
2014-04-13 21:28 1836通过实现org.springframework.aop.M ... -
Spring AOP系列之三:环绕代理
2014-04-13 18:20 1430通过实现org.aopalliance.intercept.M ... -
Spring AOP系列之二:Java代理
2014-04-13 18:00 1056通过Java代理的方式: 汽车的代理,需要实现java.la ... -
Spring AOP系列之一:手动方式
2014-04-13 17:44 1398AOP (Aspect Oriented Progra ... -
HibernateTemplate 使用
2014-03-03 22:09 01. queryListBySql hibernateTe ... -
ContextLoaderListener和ContextCleanupListener源码分析
2013-12-18 15:55 0public class ContextLoaderLis ... -
Cglib2AopProxy 源码分析
2013-12-05 14:30 0final class Cglib2AopProxy im ... -
Spring生命周期方法的调用顺序
2013-11-19 22:04 0Spring的几个接口: BeanFactoryAware: ... -
一、Spring AOP的简单实例
2013-11-06 23:31 17841. 往pom.xml文件添加以下依赖: <depe ... -
Spring配置中的bean引用其它bean的属性值
2013-01-23 15:24 4242这项功能在spring的3.0版本以上才支持,如果使用较早的版 ... -
spring JPA struts 整合开发(2) - spring集成struts
2012-05-20 20:55 1442一. spring JPA struts 整合开发(1) - ... -
spring JPA struts 整合开发(1) - spring集成JPA
2012-05-20 20:26 1711一. spring JPA struts 整合开发(1) - ...
相关推荐
一、Spring组件扫描原理 Spring组件扫描的原理基于Java的注解处理和反射机制。它会遍历指定包及其子包下的所有类,寻找带有特定注解(如@Service、@Component、@Repository、@Controller等)的类,并将这些类实例...
Spring 组件扫描使用详解 在 Spring 框架中,组件扫描是指通过注解和 XML 配置来自动检测和加载Bean的过程。下面将详细介绍标签的使用方式和原理。 一、标签的作用 标签是 Spring 框架中用于组件扫描的核心标签。...
在这个名为“Spring注解开发组件扫描器”的资料中,我们将深入探讨如何利用注解进行组件扫描以及自定义组件扫描过滤器。 首先,让我们理解Spring中的注解驱动开发。在Spring中,我们可以使用如@Service、@...
8. **工具支持**: 使用IDE如IntelliJ IDEA或Eclipse,它们通常都有对Spring的集成支持,能够帮助开发者自动完成组件扫描相关的配置,并提供代码提示和错误检查。 通过自动扫描,Spring框架使得我们能够专注于业务...
Spring装配Bean之组件扫描和自动装配 Spring框架提供了两种方式来实现自动化装配:组件扫描和自动装配。组件扫描是指Spring自动发现应用上下文中所创建的bean,而自动装配是指Spring自动满足bean之间的依赖。 组件...
首先,我们来看`@Component`注解,它是所有Spring组件的基础注解。你可以将其放在任何类上,表示这个类是一个Spring管理的bean。如果需要对bean进行更具体的分类,可以使用它的衍生注解,如`@Service`(用于业务层)...
在Spring Boot中,@ComponentScan注解是一个关键特性,它负责控制Spring容器的组件扫描行为。本文将详细探讨@ComponentScan注解的作用、工作原理以及如何使用它来优化Spring Boot应用程序的组件管理。 @...
组件扫描是指Spring容器会遍历指定的包及其子包,寻找带有特定注解的类,这些注解表明该类是一个Spring Bean。常见的注解有@Component、@Service、@Repository和@Controller,它们分别代表不同层次的组件角色。 1. ...
Spring 组件扫描 * @ComponentScan 组件扫描 * @Component 普通组件 * @Service 业务逻辑层,Service 层 * @Controller 控制层,Controller 层 * @Repository 持久层,dao 层 Spring 基于 XML 配置文件方式实现 ...
本教程将深入讲解如何使用注解进行组件扫描,以实现Spring应用中的对象自动装配。 首先,我们需要了解Spring的组件扫描(Component Scanning)。组件扫描是Spring的一项功能,它会自动发现应用上下文中定义的Bean。...
下面将详细解释Spring组件扫描的工作原理以及如何在实际项目中进行配置。 首先,`@Component`是Spring提供的核心注解,用于标记一个类为Spring管理的Bean。例如,在`User.java`中,我们看到`@Component`被用于声明`...
#### Spring组件扫描原理 在Spring中,`<context:component-scan/>`标签用于自动发现和加载带有特定注解的类,如`@Controller`, `@Service`, `@Repository`和`@Component`。这一过程称为组件扫描,它简化了Bean的...
2. **@Component, @Service, @Repository, @Controller**:这些注解是Spring组件扫描的基础,它们定义了不同类型的bean。`@Component`是最基础的注解,可以用于任何普通类;`@Service`通常用于业务逻辑层,`@...
Spring组件扫描 为了使Spring识别使用注解的bean,我们需要开启组件扫描。这可以通过在`@Configuration`类上使用`@ComponentScan`注解来完成,指定包名,Spring会扫描该包及其子包下的所有类,寻找使用了Spring...
### Spring学习之(四)基于注解的组件扫描 #### 一、组件扫描概述 **组件扫描**是Spring框架提供的一种强大的功能,它允许开发者通过简单的注解来配置和管理应用中的组件,从而大大简化了应用程序的配置工作,并...
这些注解是Spring组件扫描的基础,它们定义了一个bean。`@Component`是最通用的,适用于任何类型的服务。`@Service`通常用于业务逻辑层,`@Repository`用于数据访问层,而`@Controller`则用于处理HTTP请求。 2. `@...
2. **Spring组件扫描** 在Spring Boot中,通过`@SpringBootApplication`注解,Spring会默认进行组件扫描,寻找类路径下标记了`@Component`、`@Service`、`@Repository`和`@Controller`的类。这些注解都是`@...
6. **Spring组件扫描**: - `@SpringBootApplication`结合了`@Configuration`、`@EnableAutoConfiguration`和`@ComponentScan`三个注解的功能,自动配置Spring框架并扫描组件。 7. **自动配置**: - Spring Boot...
@ComponentScan 是 Spring 组件扫描。 6. 开启 SpringBoot 特性有哪几种方式? 开启 SpringBoot 特性有两种方式:一是继承 spring-boot-starter-parent 项目,例如:<parent> <groupId>org.springframework.boot...