`

学习Spring笔记_Annotation(注解)_Component

阅读更多

 

感谢此篇文章提供资料:http://tomfish88.iteye.com/blog/1497557

 

一般版本低的JDK在用到@Resource注解时,可能需要引入j2ee/common-annotations.jar。我用的是JDK1.7,没需要引入。

 

@Component大致可以分为以下几个注解:

1、@controller 控制器(注入服务)
2、@service 服务(注入dao)
3、@repository dao(实现dao访问)
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。 

下面这个XML代码段是引入component的扫描组件(想要实现组件方式扫描,必须在XML中配置下面代码):

<context:component-scan base-package="com.yusj">

其中base-package为需要扫描的包(含所有子包) 

 

       1、@Service用于标注业务层组件 

       2、@Controller用于标注控制层组件(如struts中的action) 

       3、@Repository用于标注数据访问组件,即DAO组件. 

       4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。  

 

例子:

package com.yusj.spring;

import org.springframework.stereotype.Service;

import com.yusj.model.User;
import com.yusj.service.IUserService;

@Service
public class UserServiceImpl implements IUserService {

	@Override
	public void add(User user) {
		
	}
}

 getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service("***")这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service("beanName") @Scope("prototype")来改变。

 

代码片段如下(如想要运行结果,需要下载附件查看):

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- spring2.5配置文件固定写法 -->
<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/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  
  <!-- 使用此配置就可以在源码中写Annotation(注解),注解编程 -->
  <context:annotation-config />
  <!--
    使用此配置代码,spring会自动扫描com.yusj包下的所有带@component注解的Class文件
    @Component包括:@controller,@service,@repository和@component
    当分不清楚Class具体要做什么工作时,可以统一写成@component.
    @controller:一般写在控制层。
    @service:一般写在服务层。
    @repository:一般写在持久层,也就是DAO。
    @component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
   -->
  <context:component-scan base-package="com.yusj" />
  
</beans>

 UserDAOImpl.java

package com.yusj.dao.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.yusj.dao.IUserDAO;
import com.yusj.model.User;

/**
 * 使用@Component实现把普通类实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
 * Component自动实例化的bean名为类的首字母小写,即userDAOImpl。如果想指定固定名可以写成@Component("udi")
 * 当此处用@Component("udi")进行重命名后,需要在用到此Bean的源代码(UserServiceImpl.setUserDAO)处使用@Resource(name="udi")注入。
 * @author yushaojian
 *
 */
@Component("udi")
public class UserDAOImpl implements IUserDAO {
	@Override
	public void save(User user) {
		System.out.println("user save success...");
		System.out.println(user.toString());
	}
}

 UserServiceImpl.java

package com.yusj.service.impl;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.yusj.dao.IUserDAO;
import com.yusj.model.User;
import com.yusj.service.IUserService;
/**
 * 使用@Component实现把普通类实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
 * Component自动实例化的bean名为类的首字母小写,即userDAOImpl。如果想指定固定名可以写成@Component("usi")
 * 当此处用@Component("usi")进行重命名后,在Test.java中访问Bean时需要用usi否则用userServiceImpl。
 *
 */
@Component("usi")
public class UserServiceImpl implements IUserService {
	// 为此属性提供setter,getter方法.是为了让Spring容器管理
	private IUserDAO userDAO ; 

	public IUserDAO getUserDAO() {
		return userDAO;
	}
	
	/**
	 * 用Annotation的Resource方法自动装载,首先按byName其次按byType(当byName找不到时按byType查找)。
	 * 用@Resource(name="udi")指定想要装载的bean名
	 * @param userDAO
	 */
	@Resource(name="udi")
	public void setUserDAO(IUserDAO userDAO) {
		this.userDAO = userDAO;
	}

	@Override
	public void add(User user) {
		userDAO.save(user);
	}

}

 Test.java

package com.yusj.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import com.yusj.model.User;
import com.yusj.service.IUserService;

public class Test {

	public static void main(String[] args) {
		
		/**
		 * Spring提供的读取配置文件方法,此处推荐使用ApplicationContext而非BeanFactory.
		 * beans配置文件默认读取src根目录文件名相同的XML文件
		 * 如果需要放在特殊的位置,那么需要指定具体路径,比如:com/yusj/xml/beans.xml
		 * 
		 */
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		/**
		 * 获取UserServiceImpl.java中利用@Component("usi")自动装载的bean
		 * 
		 */
		IUserService service = (IUserService) ctx.getBean("usi");
		// 初始化用户并赋值
		User u = new User();
		u.setUsername("张三");
		u.setPassword("zhangsan");
		// 添加用户测试
		service.add(u);
		/**
		 * 输出结果:
		 * user save success...
		 * User [username=张三, password=zhangsan]
		 */
	}
}

 

 

eclipse项目导出见附件(Export -> General -> File System):

 

 

0
0
分享到:
评论

相关推荐

    学习Spring笔记_Annotation(注解)_Autowired_Qualifier

    这篇学习Spring笔记将深入探讨这两个注解的用法、原理以及它们在实际开发中的应用场景。 `@Autowired`注解是Spring框架提供的一种依赖注入(Dependency Injection,DI)机制,用于自动装配Bean。它可以根据类型或...

    spring2.5_学习笔记.

    ### Spring2.5 学习笔记知识点概览 #### 第一课:面向抽象编程 - **概念理解**:面向抽象编程是一种设计模式,其核心思想是通过定义接口或抽象类来实现程序结构的设计,使具体实现与接口分离,增强系统的灵活性和...

    Spring注解 - 52注解 - 原稿笔记

    注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before , @Component , @ComponentScan , @ComponentScans , @...

    SSH笔记-annotation配置注入关系1

    在本笔记中,我们将重点关注如何使用Spring注解`@Component`、`@Service`、`@Repository`和`@Controller`来简化和增强应用程序的组件装配。 首先,`@Component`是Spring提供的一个基础注解,用于标记任何通用的Java...

    Spring笔记整理.zip

    在Spring中,注解被广泛用于配置bean,如`@Component`、`@Service`、`@Repository`和`@Controller`用于定义bean,`@Autowired`用于自动装配依赖,`@Qualifier`用于指定特定的bean。这些注解使得XML配置变得多余,...

    spring--day02笔记.doc

    Spring框架提供了一些Annotation,例如@Component、@Service、@Repository等,用于标注Bean的作用域和生命周期。 AOP AOP(Aspect-Oriented Programming,面向方面编程)是软件开发中的一种编程范式,允许开发者...

    Spring技术内幕 学习笔记

    标题中的“Spring技术内幕 学习笔记”表明这是一份关于深入理解Spring框架核心机制的资料集合,主要关注Spring框架的内部工作原理和高级用法。描述中的“NULL”没有提供额外信息,但我们可以通过标签“源码”和...

    spring笔记

    Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...

    spring_Annoation:学习Spring注解的笔记

    这篇学习笔记将围绕Spring注解进行深入探讨。 1. **Spring核心注解** - `@Component`:这是所有Spring组件注解的基础,用于标记一个类为Spring管理的bean。其他的注解如`@Service`、`@Repository`和`@Controller`...

    Spring學習筆記DEMO代碼(一)

    在本篇Spring学习笔记的DEMO代码中,我们将探索Spring框架的核心特性——基于注解的组件扫描和依赖注入。这是一份旨在帮助初学者和有经验的开发者更好地理解和应用Spring框架的重要资料。在这个压缩包中,包含了一个...

    spring2.5学习笔记

    ### Spring2.5 学习笔记关键知识点梳理 #### 搭建Spring的运行环境 - **新建项目**: 使用IDE工具如Eclipse或IntelliJ IDEA创建一个新的Java Web项目。 - **Spring配置文件**: 在项目的`src/main/resources`目录下...

    牛人的spring学习笔记,非常适合初学者

    ### 牛人的Spring学习笔记,非常适合初学者 #### 第一课:面向抽象编程 面向抽象编程是一种编程思想,强调在程序设计过程中通过定义抽象层来分离业务逻辑与具体实现细节。这种方式有助于提高软件的可维护性和扩展...

    Spring MVC 学习笔记 一 创建项目

    更多关于Spring MVC的高级特性,如拦截器、AOP、MVC注解、数据绑定等,将在后续的学习笔记中逐步展开。参考提供的博文链接(https://starscream.iteye.com/blog/1057305)可以获取更多详细信息和实战案例。

    Spring MVC 学习笔记

    **Spring MVC 学习笔记** Spring MVC 是 Spring 框架的一个模块,专门用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关注底层的细节。...

    spring学习笔记(四)

    在本篇"Spring学习笔记(四)"中,我们将...总结一下,这篇"Spring学习笔记(四)"主要涵盖了`@Value`注解的使用和源码解析,包括SpEL在注入过程中的作用。了解并掌握这些知识,将有助于提升你在Spring开发中的技能水平。

    Spring3 MVC 学习笔记 入门

    ### Spring3 MVC 学习笔记入门知识点解析 #### 一、Spring MVC 概念与架构 **Spring MVC** 是 Spring Framework 的一个重要模块,主要用于构建基于 Web 的应用。它实现了 Model-View-Controller(MVC)设计模式,...

    java5.0新特性总结--Annotation系统学习整理笔记

    这篇博客是关于Java 5.0新特性——Annotation的系统学习与整理笔记,通过讲解与实例,深入探讨了注解在Junit、Spring和Hibernate中的应用。 首先,注解是一种声明式的编程元素,它可以附加到类、接口、方法、变量等...

    Spring笔记(第一次)1

    本笔记将介绍如何从传统的XML配置方式转换为使用注解进行开发,以及Spring的@ComponentScan扫描规则和bean的scope属性。 首先,创建一个Spring项目通常是从构建Maven工程开始的。在`pom.xml`中引入`spring-context`...

    学习spring时的笔记 二

    以上内容涵盖了Spring框架的基础配置、依赖管理和高级特性等方面的知识点,希望对你学习Spring有所帮助。通过深入理解这些概念和技术,可以更好地掌握Spring框架的核心能力,并能灵活应用于实际项目中。

Global site tag (gtag.js) - Google Analytics