使用注解实现spring配置。
个人感觉适合在小团队开发或模块分工极其明确的合作中使用,无需再花时间去编写重复的xml文件。但注解隐藏了各种依赖注入关系和bean实现,不像配置文件那样一目了然,在多人项目及阅读源码时并不方便。
环境:与第一章相同。依赖于之前创建的工程、库、接口定义。
1.注解实现接口
TestServiceAnnoImpl注解实现service接口。
package com.sunbin.test.testSpring.service.impl;
import com.sunbin.test.testSpring.dao.TestDao;
import com.sunbin.test.testSpring.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TestServiceAnnoImpl implements TestService {
@Autowired
private TestDao testDao;
public String test(String string) {
// TODO Auto-generated method stub
return "testServiceAnnoImpl.test:"+testDao.test(string);
}
}
TestDaoAnnoImpl注解实现dao接口。
package com.sunbin.test.testSpring.dao.impl;
import com.sunbin.test.testSpring.dao.TestDao;
import org.springframework.stereotype.Repository;
@Repository
public class TestDaoAnnoImpl implements TestDao {
@Override
public String test(String string) {
// TODO Auto-generated method stub
return "testDaoAnnoImpl.test:"+string;
}
}
@Repository注解只能用在dao层,该注解不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean),可以作用在任何层次。
具体区别见
http://blog.csdn.net/ye1992/article/details/19971467
@Autowired将自动按照类型注入bean。
与此类似的注解还有:
@Inject是jsr330中的规范,通过AutowiredAnnotationBeanPostProcessor类实现的依赖注入。
@Resource是jsr250规范的实现,通过CommonAnnotationBeanPostProcessor类实现依赖注入。
具体区别见
http://blog.csdn.net/u012734441/article/details/51706504
2.测试
创建测试类TestAnno。
package com.sunbin.test.testSpring.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.sunbin.test.testSpring.service.TestService;
public class TestAnno {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext("com.sunbin.test.testSpring");
TestService testService =(TestService) applicationContext.getBean(TestService.class);
System.out.println(testService.test("helloWorldAnno"));
}
}
测试类中扫描com.sunbin.test.testSpring包下的所有注解,创建ApplicationContext、创建Bean、自动注入。
运行结果如下:
- testServiceAnnoImpl.test:testDaoAnnoImpl.test:helloWorldAnno
说明Test、Service、Dao各层扫描注解、创建、注入、调用成功。
3.xml配置扫描注解
如果Context创建的入口必须有xml配置文件(如web项目),就不方便用AnnotationConfigApplicationContext来加载spring。可以通过在xml中增加配置来自动扫描指定包。
新增spring配置文件root-annonation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="byName" default-lazy-init="true">
<context:annotation-config />
<context:component-scan base-package="com.sunbin"></context:component-scan>
</beans>
测试类修改如下:
package com.sunbin.test.testSpring.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sunbin.test.testSpring.service.TestService;
public class TestAnno {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "root-annonation.xml" });
TestService testService =(TestService) applicationContext.getBean(TestService.class);
System.out.println(testService.test("helloWorldAnno"));
}
}
运行结果相同。
注意xml配置中自动注入方式是byName(也可以改为byType),注解默认是byType。如果该接口类型的实现Bean有多个,spring装载时会报错。
分享到:
相关推荐
综上所述,"spring简单注解+log4j记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...
本实例"spring-hibernate注解配置源码"旨在展示如何在不使用XML配置的情况下,通过注解的方式整合Struts2、Spring和Hibernate,创建一个完整的MVC(模型-视图-控制器)架构的应用。下面将详细介绍这个过程中的关键...
总结起来,这个示例将演示如何利用Spring 4的Java注解配置,结合Redis缓存,构建一个现代化的、可扩展的应用程序。通过这种方式,你可以学习到如何有效地管理和组织代码,以及如何利用Spring提供的工具和服务来提升...
标题 "Spring全注解project示例 (无web.xml配置)" 提供了我们即将探讨的核心主题:一个使用Spring框架,完全依赖注解配置的项目,且没有传统的web.xml部署描述符。这种配置方式在现代Spring应用中非常常见,因为它...
在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...
4. Hibernate的配置和实体类的注解,以及如何在Spring中配置SessionFactory和TransactionManager。 5. 整合Spring MVC、Spring和Hibernate,实现数据库操作的自动化。 6. 使用Spring测试框架进行单元测试和集成测试...
压缩包文件`ssh_xml.zip`和`ssh_annotation.zip`分别包含使用XML配置和注解配置的整合示例工程。通过分析和运行这些示例,你可以更深入地理解SSH框架整合的具体步骤和工作原理,这对于学习和开发Java Web应用非常有...
总结,通过上述步骤,我们已经成功地使用Spring注解配置了Quartz2.2.1,实现了基于注解的任务调度。这种方式简化了配置,使得任务管理和扩展更加方便。在实际开发中,可以根据项目需求调整触发规则,实现复杂的定时...
这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...
在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...
标题 "s2sh+springSecurity的注解配置例子" 提供了一个关于整合Struts2、Spring和Hibernate(通常称为S2SH)框架与Spring Security进行注解配置的示例。这个例子展示了如何在Java Web应用中使用这些技术来实现安全...
通过这个项目,开发者可以学习到如何利用Java注解实现三大框架的整合,理解它们如何协同工作,以及如何在不使用XML配置的情况下构建一个完整的Web应用。这对于提升Java EE开发技能,适应现代敏捷开发环境是非常有...
本示例工程是一个基于Maven的Web项目,展示了如何通过XML配置和注解两种方式来设置Spring定时器,并且还涉及到使用注解配置线程池。 首先,我们来探讨XML配置方式。在Spring的配置文件(如`applicationContext.xml`...
通过上述步骤,我们实现了MyBatis与Spring的整合,使用`MapperFactoryBean`并结合注解的方式大大简化了代码量和配置复杂度。这种方式特别适合于初学者学习,并且在实际项目中也十分常见。希望本篇总结能够帮助大家更...
在本文中,我们将深入探讨如何使用Spring框架的注解配置方式来实现应用程序的轻量级配置。Spring框架是Java开发中的一个核心工具,它通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
为了更深入地学习Spring 3.0的注解注入,你可以阅读提供的文档`Spring 3注解注入.docx`,它应该包含了详细的示例和解释,帮助你更好地理解和掌握这一重要特性。通过熟练运用注解注入,可以显著提升代码的可读性和可...
虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解方式有助于深入学习这些框架的工作原理,对提升开发技能有长远的帮助。在实践中,你可能会遇到如何处理异常、如何进行事务管理、如何优化查询性能等...
【Spring注解学习手札】 在现代Java Web开发中,Spring框架因其强大的功能和灵活性而备受推崇。Spring注解的引入极大地简化了配置文件,提高了开发效率。本篇将聚焦于Spring MVC中的注解,通过构建一个简单的Web...