`
sb33060418
  • 浏览: 152494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring4学习(二)注解配置

 
阅读更多
使用注解实现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记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...

    spring-hibernate注解配置源码

    本实例"spring-hibernate注解配置源码"旨在展示如何在不使用XML配置的情况下,通过注解的方式整合Struts2、Spring和Hibernate,创建一个完整的MVC(模型-视图-控制器)架构的应用。下面将详细介绍这个过程中的关键...

    spring4基于java注解事例

    总结起来,这个示例将演示如何利用Spring 4的Java注解配置,结合Redis缓存,构建一个现代化的、可扩展的应用程序。通过这种方式,你可以学习到如何有效地管理和组织代码,以及如何利用Spring提供的工具和服务来提升...

    Spring全注解project示例 (无web.xml配置)

    标题 "Spring全注解project示例 (无web.xml配置)" 提供了我们即将探讨的核心主题:一个使用Spring框架,完全依赖注解配置的项目,且没有传统的web.xml部署描述符。这种配置方式在现代Spring应用中非常常见,因为它...

    Spring IoC简单示例-注解配置-Maven构建

    在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...

    Quartz2.2.1基于Spring注解方式配置Quartz

    总结,通过上述步骤,我们已经成功地使用Spring注解配置了Quartz2.2.1,实现了基于注解的任务调度。这种方式简化了配置,使得任务管理和扩展更加方便。在实际开发中,可以根据项目需求调整触发规则,实现复杂的定时...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    4. Hibernate的配置和实体类的注解,以及如何在Spring中配置SessionFactory和TransactionManager。 5. 整合Spring MVC、Spring和Hibernate,实现数据库操作的自动化。 6. 使用Spring测试框架进行单元测试和集成测试...

    Struts2+Hibernate4+Spring3整合(注解和XML方式都有)

    压缩包文件`ssh_xml.zip`和`ssh_annotation.zip`分别包含使用XML配置和注解配置的整合示例工程。通过分析和运行这些示例,你可以更深入地理解SSH框架整合的具体步骤和工作原理,这对于学习和开发Java Web应用非常有...

    spring3.0 mvc 注解实现helloworld输出

    这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...

    Spring 注解学习手札(一) 构建简单Web应用

    在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...

    s2sh+springSecurity的注解配置例子

    标题 "s2sh+springSecurity的注解配置例子" 提供了一个关于整合Struts2、Spring和Hibernate(通常称为S2SH)框架与Spring Security进行注解配置的示例。这个例子展示了如何在Java Web应用中使用这些技术来实现安全...

    Struts+Spring+Hibernate注解零配置整合

    通过这个项目,开发者可以学习到如何利用Java注解实现三大框架的整合,理解它们如何协同工作,以及如何在不使用XML配置的情况下构建一个完整的Web应用。这对于提升Java EE开发技能,适应现代敏捷开发环境是非常有...

    spring定时器的mxl和注解配置

    本示例工程是一个基于Maven的Web项目,展示了如何通过XML配置和注解两种方式来设置Spring定时器,并且还涉及到使用注解配置线程池。 首先,我们来探讨XML配置方式。在Spring的配置文件(如`applicationContext.xml`...

    mybatis和spring整合方式-带注解

    通过上述步骤,我们实现了MyBatis与Spring的整合,使用`MapperFactoryBean`并结合注解的方式大大简化了代码量和配置复杂度。这种方式特别适合于初学者学习,并且在实际项目中也十分常见。希望本篇总结能够帮助大家更...

    Spring 注解 方式配制的小demo

    在本文中,我们将深入探讨如何使用Spring框架的注解配置方式来实现应用程序的轻量级配置。Spring框架是Java开发中的一个核心工具,它通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    (转)Spring 3.0 注解注入详解

    为了更深入地学习Spring 3.0的注解注入,你可以阅读提供的文档`Spring 3注解注入.docx`,它应该包含了详细的示例和解释,帮助你更好地理解和掌握这一重要特性。通过熟练运用注解注入,可以显著提升代码的可读性和可...

    非注解Springmvc+spring+hibernate 入门实例

    虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解方式有助于深入学习这些框架的工作原理,对提升开发技能有长远的帮助。在实践中,你可能会遇到如何处理异常、如何进行事务管理、如何优化查询性能等...

    Spring 注解学习手札

    【Spring注解学习手札】 在现代Java Web开发中,Spring框架因其强大的功能和灵活性而备受推崇。Spring注解的引入极大地简化了配置文件,提高了开发效率。本篇将聚焦于Spring MVC中的注解,通过构建一个简单的Web...

Global site tag (gtag.js) - Google Analytics