- 浏览: 519118 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (299)
- Oracle(pl/sql_Erp_Pro*C) (69)
- 设计模式 (4)
- spring (23)
- ext (17)
- apache开源项目应用 (4)
- jquery (16)
- 生活琐事 (8)
- 下载资源 (23)
- mysql (2)
- Eclipse使用积累 (5)
- 报表类(报表/图表) (13)
- php (4)
- Web多彩文本框 (3)
- json (4)
- jqgrid (2)
- ant (2)
- java算法积累 (8)
- EL表达式/JSTL (4)
- poi (3)
- gwt (2)
- 爬网第一步 (2)
- javascript (17)
- Javaweb (8)
- tomcat (1)
- flex (1)
- Java&DB (3)
- J2SE (7)
- linux (3)
- 数据结构 (1)
- dot net (5)
- struts (1)
- ibatis (1)
- log4j (1)
- 项目管理 (1)
- Java native interface(jni,jacob......) (5)
- applet (1)
- VB.net/C#.net/JNI (20)
- css (1)
- Sqlite (1)
- servlet (1)
- REST (1)
最新评论
-
wenhurena:
能不能给一下解压密码roki.work.2017@gmail. ...
Ebs解体新書と学習資料1 -
liutao1600:
楼主写的太好了,每天学习~~
Spring_MVC(6)测试 -
liutao1600:
太好了,每天学习你的文章~~~
Spring_MVC(3)表单页面处理 -
liutao1600:
学习了,太好了
Spring_MVC(2)控制层处理 -
liutao1600:
学习了~~~
Spring_MVC(1)构建简单web应用
从spring2.5开始,annotation结合BeanPostProcessor成了扩展Spring IoC容器的常用方法。Spring2.5增加了对JSR-250中@Resource, @PostConstruct, @PreDestroy的支持,Spring 3.0又增加了对JSR-330 (Dependency Injection for Java)中 @Inject,@Qualifier, @Named, @Provider的支持。将相关的jsr jar包丢到classpath,并注册相应的BeanPostProcessor,其它的一切spring会帮你完成。spring还提供了一个简便的方法,通过在context的XML配置文件中加入:
spring 会自动注册AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor,代码中就可以使用@Autowired, @Required等annotaion了。
再回到文章开头的问题吧。spring从2.5开始加入了classpath scanning的功能,来代替之前在xml中定义Bean。首先在context的XML配置文件中加入:
spring 便会在org.example以及它的子package中查找所有的类,将符合条件的Bean注册在IoC容器当中。到3.0,spring引入了4种原型annotation(stereotype annotaion),分别为@Component, @Serivce, @Controller, @Repository。一般情况下只在将类加上@Componet,spring在扫描classpath的时候会自动检测到,并将这个类注册到IoC 容器中,在代码的其它部分,便可以借助@Autowired来注入这个Bean。后面的三种原型分别是特殊的@Conponet,适用于更加特殊的场合,比如Service层,Spring MVC, DAO等。这一点从源码上也可以看出:
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Component
- public @interface Service {
- String value() default "";
- }
@Service本身就是被@Componet这个元注解(meta annotaion)标注的。因此对于这三个层的Bean, spring的文档也推荐将它们标注为@Service, @Controller与@Repository,因为这样更方便其它工具对这些特殊Bean的处理以及为它们加上相关AOP的 aspects,spring在后续版本的升级上也可能对它们增加更多的特殊语义。至于它们到底比普通的@Componet多了哪些 aspects,spring的文档上并没有详细说明,只简单地提到了对于@Repository,spring会自动加上exception translation,用于转化持久层抛出的异常。我google了一下,包括spring论坛的帖子,也没能找到这方面的详细信息,这点希望熟悉spring源代码的朋友能够说说。
现在通过classpath scanning以及@Component,@Autowired等annotation,我们已无须通过xml来定义Bean了。但还必须在application context的xml中添加<context:annotation-config/>与<context:component-scan base-package="org.example"/>。再进一步想,能不能把这个配置文件也去掉,实现真正的零配置?spring3.0原先Spring JavaConfig项目的功能移到了Spring Core里面,从而实现了利用Java代码来代替传统的XML配置文件,这个功能是通过@Configuration, @Bean, @Import, @DependsOn等annotation实现的。
- @Configuration
- public class AppConfig {
- @Bean
- public GreetingDao greetingDao() {
- return new GreetingDao();
- }
- }
- public class GreetingDao {
- public String getGreeting(){
- return "Hi";
- }
- }
@configuration表明这个类包含Bean的定义,@Bean在这里就相当于原先的配置:<bean id="greetingDao" class="septem.demo.GreetingDao"/>。通过AnnotationConfigApplicationContext就可以使用这个Bean了:
- @Test
- public void test_java_config(){
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
- GreetingDao dao = ctx.getBean(GreetingDao.class);
- assertEquals("Hi", dao.getGreeting());
- }
注意AppConfig里面的greetingDao虽然是是直接new出来的,但它的默认scope仍是singleton,跟采用配置文件的情况是一样的,如果需要prototype,则可以另外为它加上@Scope("prototype")。上面采用的方法是手工将Bean定义在 @Configuration里面,我们同样可以让spring自动检测Bean,比如下面的GreetingSerivce:
将GreetingService标注为@Service,就不需要在AppConfig里面注册了:
- @Test
- public void test_service(){
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
- ctx.scan("septem.demo");
- ctx.refresh();
- GreetingService service = ctx.getBean(GreetingService.class);
- assertEquals("Hello", service.sayHello());
- }
以上的ctx.scan("septem.demo")就相当于配置文件:<context:component-scan base-package="septem.demo"/>。注意因为@Configuration本身也是被@Component这个meta-annotation标注的,所以AppConfig也不需要手工在 AnnotationConfigApplicationContext里注册,它同@Service一样会被自动检测到。Spring3.0还提供了 AnnotationConfigWebApplicationContext用来代替原先web项目中的 XmlWebApplicationContext,这样在web项目中同样可以实现真正的零配置了
发表评论
-
cronExpression
2010-08-30 17:57 1191一个Cron-表达式是一个由六至七个字段组成由空格分隔的 ... -
spring任务调度(task)
2010-08-23 13:24 2851spring 任务调度总结参考资料http://www.ibm ... -
spring 任务配置
2010-08-23 10:45 1203xml 代码 <bean id="i ... -
Spring Roo 自动化集成开发工具
2010-08-04 14:54 2248Roo是一种 Spring 开发的辅助工具,使用命令行操作来生 ... -
spring3.0学习
2010-08-03 16:24 859https://src.springframework.org ... -
Spring mvc 转发、重定向
2010-07-28 16:53 2407spring控制器最后返回一个ModelAndView( ... -
spring api download
2010-07-28 08:43 1179在网上找了好多,都下不下来,要不就是需要注册登录什么的,才能下 ... -
Spring uploadFile
2010-05-02 20:45 2232先让我们来看一段摘自《Spring 2.5 Referen ... -
Spring_MVC(6)测试
2010-04-24 18:48 3728这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(5)业务层处理
2010-04-24 18:47 1985这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(4)持久层处理
2010-04-24 18:45 1202这里将用到以下几个包: 引用 aopalliance-1 ... -
Spring_MVC(3)表单页面处理
2010-04-24 18:43 3040// 跳转到用户信息页面 ... -
Spring_MVC(2)控制层处理
2010-04-24 18:42 1696言归正传,研究一下注解下的控制层。 我习惯于使用JSTL展示页 ... -
Spring_MVC(1)构建简单web应用
2010-04-24 18:40 1441Java代码 /** * 2010 ... -
spring实现文件上传
2010-04-24 15:15 1621Spring由内置的multipart支持web应用中的文件上 ... -
Spring MVC:使用InternalResourceViewResolver视图解析器
2010-02-24 09:14 2050参考:Sping 2.0.8\docs\MVC-step-by ... -
ibatis+spring控制事务配置
2009-04-05 10:25 1923<bean id="dataSource&qu ... -
转:spring事务控制配置实例
2009-04-03 10:47 3361Spring声明式事务配置的几种方法 在Spring中进 ... -
spring+ibatis+struts事务控制配置
2009-04-03 10:38 1560<?xml version="1.0" ... -
spring+ibatis+struts配置问题
2009-04-01 14:48 1128以下web.xml配置 <?xml version=&q ...
相关推荐
Spring 3.0 是一个里程碑式的版本,引入了大量的新特性,其中注解注入是其核心改进之一。注解注入使得代码更加简洁,减少了XML配置,提高了开发效率。在这个专题里,我们将深入探讨Spring 3.0中的注解注入机制。 ...
10. **Web Flow**:Spring Web Flow是Spring的一个子项目,提供了一种声明式的方式来管理复杂的用户交互流程。 在下载的"spring3.0 全部jar包"中,"dist"文件夹可能包含了所有Spring 3.0框架运行所需的库文件,包括...
Spring 3.0 是一个里程碑式的版本,在Java企业级应用开发领域中占据着核心地位。这个版本的发布引入了许多新特性、改进和优化,旨在提升开发者的工作效率和应用程序的可维护性。Spring 框架以其强大的依赖注入...
首先,Spring MVC注解允许开发者以声明式的方式配置控制器,避免了传统的XML配置文件。这极大地简化了代码,提高了可读性和维护性。例如,`@RequestMapping`注解就是其中的关键,它可以在类级别或方法级别使用,用于...
在Spring 3.0中,注解的应用更加广泛,如@Controller、@Service、@Repository和@Transactional等,极大地简化了XML配置,提高了开发效率。开发者可以通过注解直接在类或方法上声明其在应用程序中的角色和行为。 3....
Spring 3.0在依赖注入(DI)方面进行了优化,支持了类型安全的自动装配,允许开发者通过注解(@Autowired)来声明所需依赖,而不仅仅是基于接口或XML配置。这使得代码更简洁,降低了出错的可能性。 2. **注解驱动...
事务管理方面,Spring 3.0的PlatformTransactionManager接口提供了统一的事务管理,支持编程式和声明式事务控制。 面向切面编程(AOP)在Spring 3.0中也得到了强化。新增的@Aspect注解使得定义切面更加直观,而@...
Spring 3.0 是 Spring 框架的一个重要版本,发布于2009年,它带来了许多新特性和改进,极大地增强了 Java 开发者在企业级...Spring 3.0 作为里程碑式的一版,为后续的 Spring 4.x 和 Spring Boot 打下了坚实的基础。
6. **数据访问**:Spring3.0对JDBC、Hibernate、MyBatis等持久层技术提供了更全面的支持,简化了数据库操作,如声明式事务管理。 7. **集成测试**:Spring Test模块提供了测试上下文的支持,使得单元测试和集成测试...
声明式事务管理通过@Transactional注解实现,大大减少了事务管理的代码量。 6. **消息支持**:Spring 3.0提供了消息传递支持,包括JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),方便...
Spring 3.0的AOP模块提供了声明式事务管理,允许开发者通过注解如@Transactional实现事务控制,简化了事务管理的代码。同时,增强了对AspectJ的支持,使得切面的定义更为灵活。 三、数据访问/集成(Data Access/...
首先,Spring 3.0的一大亮点是增强了对Java 5和6的支持,引入了基于注解的配置,大大减少了XML配置文件的数量和复杂性。开发者可以使用如`@Autowired`、`@Service`、`@Repository`和`@Controller`等注解,直接在类或...
Spring 3.0 API是Java开发中至关重要的一个框架,它是Spring框架的一个主要...通过查阅`Spring3.0-API.chm`文件,开发者可以快速查找并学习到Spring 3.0中的各种功能和API,从而更好地利用Spring进行应用程序的开发。
标题 "spring3.0学习" 暗示我们要探讨的是Spring框架的一个重要版本——Spring 3.0。Spring是Java企业级应用开发中广泛使用的开源框架,它简化了依赖注入、事务管理、AOP(面向切面编程)等多个方面的工作。在Spring...
`@Transactional`注解提供声明式事务管理,简化了事务控制。同时,Spring的DAO支持类如JdbcTemplate和HibernateTemplate提供了更方便的数据库操作接口。 五、RESTful支持 Spring 3.0引入了对RESTful风格API的支持,...
6. **声明式事务管理**:支持基于注解的事务管理,使得事务配置更加简洁。 7. **JSR-303验证**:集成JSR-303 Bean Validation标准,提供了字段级的验证支持。 8. **支持Groovy**:引入了对Groovy的支持,可以方便地...
Spring 3.0加强了对注解的支持,包括@PostConstruct、@PreDestroy等生命周期注解的使用,以及@ComponentScan等自动扫描注解的改进。 #### WebSocket支持 Spring 3.0还加入了对WebSocket的支持,使得基于Web的应用...
2. **AOP(面向切面编程)**: 提供了声明式事务管理、日志记录等功能,使得代码更加整洁,降低了模块间的耦合。 3. **MVC框架增强**: Spring MVC 3.0引入了更多的注解支持,如@Controller、@RequestMapping等,简化...
Spring提供了一种声明式事务管理的方式,通过AOP在需要的地方自动进行事务的开启、提交、回滚等操作,极大地简化了事务处理的代码。 在实际项目中,Spring3.0广泛应用于业务逻辑层(Service)和数据访问层(DAO),...