以下记录了一个小小的Spring3的annotation的应用笔记。

文件列表:

UserService-interface

UserDao-interface

UserServiceImpl-UserService接口的实现

UserDaoImpl-UserDao接口的实现

User-实体类

package com.niewj.model;

public class User {

	private String name;

	public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
package com.niewj.service;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service; import com.niewj.dao.LogDao;
import com.niewj.dao.UserDao;
import com.niewj.model.User; @Service("userServiceImplementation")
// @Component/@Repository/@Controller/@Service
@Scope("singleton")
// @Scope("prototype")
public class UserServiceImpl implements UserService { //  也可以此处声明,也可以在setter处声明。
/*    @Autowired
    @Qualifier("userDaoImplementation")*/
    //@Resource(name="userDaoImplementation")// 不指定的话,他会找setter方法,最后可以会退到,找byType匹配。
    private UserDao uuuserDao;     
    private LogDao logDao;     public UserDao getUuuserDao() {
        return uuuserDao;
    }     /*
    @Autowired// (required=false)
    @Qualifier("userDaoImplementation")// id/name
     */
    @Resource(name="userDaoImplementation")
    public void setUuuserDao(UserDao uuuserDao) {
        this.uuuserDao = uuuserDao;
    }     public LogDao getLogDao() {
        return logDao;
    }     @Autowired
    public void setLogDao(LogDao logDao) {
        this.logDao = logDao;
    }     @Override
    public boolean regist(User user) {
        logDao.log();
        return uuuserDao.save(user);
    }
}
package com.niewj.dao;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import org.springframework.stereotype.Repository; import com.niewj.model.User; /* @Repository/@Controller/@Service都属于@Component,只是为了更明显的标注业务层、控制层、还是Dao层 */ @Repository("userDaoImplementation")
public class UserDaoImpl implements UserDao {     @PostConstruct// 相当于<bean init-method="init">
    public void init(){
        System.err.println("实例化DAO后,会马上调用此方法。");
    }     @PreDestroy//相当于<bean destroy-method="destroy">
    public void destroy(){
        System.err.println("销毁DAO之前,会执行此方法。");
    }
    
    @Override
    public boolean save(User user) {
        System.err.println("新增用户:" +user.getName());
        return true;
    }
}
package com.niewj.dao;

import org.springframework.stereotype.Repository;

@Repository("logDao")
public class LogDaoImpl implements LogDao { @Override
public void log() {
System.out.println("Logging......记录在日志............OK");
}
}
package com.niewj;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.niewj.model.User;
import com.niewj.service.UserService;
import com.niewj.service.UserServiceImpl; public class AnnotationTest {
    @Test
    public void testIocAnnotation() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService loginService = ac.getBean("userServiceImplementation", UserServiceImpl.class);
        
        User user = new User();
        user.setName("dotjar");
        loginService.regist(user);
    }
}
<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <import resource="beans.xml" /> </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/tx   
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">     
    <!-- 开启Annotation支持 如果有context:component-scan可以省去此处声明-->
    <!-- <context:annotation-config /> -->
    
    <context:component-scan base-package="com.niewj">
    </context:component-scan>
</beans>

1.UserServiceImpl中的@Service中的字串应该和getBean中的一致;

2.UserDaoImpl中的@Repository中参数应该和UserServiceImpl中Setter方法处的@Autowired@Qualifier("dao参数")一致

3.配置文件中开启注解支持:

*1.配置文件中开启context命名空间支持:<beans>标记中加入:
        <1>加入【xmlns】:【xmlns:context="http://www.springframework.org/schema/context"】
        <2>加入【xsi:schemaLocation】:
        【http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd】
   
    *2.配置文件中开启注解支持:
        <context:annotation-config />

*3.因为有<context:component-scan>所以,  <context:annotation-config />可以省去。

小结:

1.

 @Repository/@Controller/@Service都属于@Component,只是为了更明显的标注业务层、控制层、还是Dao层

2.

@Resource(name="userDaoImplementation")// 不指定name的话,他会找setter方法,按照byName找不到,最后可以byType匹配。

3.

 @Autowired // byType自动装配
 @Qualifier("userDaoImplementation") //byName,必须有@Autowired同时出现。

Spring3的IOC的annotation学习笔记的更多相关文章

  1. Spring入门IOC和AOP学习笔记

    Spring入门IOC和AOP学习笔记 概述 Spring框架的核心有两个: Spring容器作为超级大工厂,负责管理.创建所有的Java对象,这些Java对象被称为Bean. Spring容器管理容 ...

  2. Java注解Annotation学习笔记

    一.自定义注解 1. 使用关键字 @interface 2. 默认情况下,注解可以修饰 类.方法.接口等. 3. 如下为一个基本的注解例子: //注解中的成员变量非常像定义接口 public @int ...

  3. IoC容器Autofac学习笔记

    一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...

  4. JDK5.0 Annotation学习笔记(一)

    背景知识:         从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范.注释是以"@注释名"在代码中存在的,还可以添加一些参数值,例如: ...

  5. Spring中的IOC容器(学习笔记)

    如何将Bean配置到Spring的Bean容器中 通过xml配置文件: Bean实现类来自第三方类库:如“DataSource”等      需要命名空间配置如:context,aop,mvc等   ...

  6. Web Service学习笔记(webservice、soap、wsdl、jws详细分析)

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  7. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  8. Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  9. Hibernate 马士兵 学习笔记 (转)

    目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...

随机推荐

  1. 强大的table组件-antd pro table

    概述 antd pro table antd pro table 的主要部分 表格显示的配置(绿色框内) 检索的配置(红色框内) 是否显示检索部分 检索的内容是如何生效的 工具栏的配置(黄色框内) 表 ...

  2. MeteoInfoLab脚本示例:TOMS HDF数据

    TOMS (Total Ozone Mapping Spectrometer)数据是全球臭氧观测.脚本程序: #Add data file folder = 'D:/Temp/hdf/' fns = ...

  3. 调试与优化:一次数据中心看板 T+1 改 T+0 优化过程

    背景 团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析数据,用户行为数据来源于多个数据源(餐饮.生活日用.充值消费.交通出行.通讯物流.交通出行.医疗保健.住房物业 ...

  4. swoft根据表创建实体

    php bin/swoft entity:gen table= table1,table2,table3,... [root@localhost swoft]# php bin/swoft entit ...

  5. 不死的小强 .net core 微服务 快速开发框架 Viper 限流

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  6. 浏览器缓存引起的bug总结

    缓存原理 浏览器缓存分为强缓存和协商缓存 先检查是否过期,没有过期直接使用本地缓存.如果过期,查看是否使用协商缓存 协商缓存流程: 后端返回headers: ETag: W/"1e3-175 ...

  7. Ⅳ Monte Carlo Methods

    Dictum:  Nutrition books in the world. There is no book in life, there is no sunlight; wisdom withou ...

  8. MongoDB简介---MongoDB基础用法(一)

    Mongo MongoDB是一个基于分布式文件存储的数据库.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 将数据存储为一 ...

  9. redis简介以及redis集群配置

    简介: redis 是一个高性能的key-value数据库..它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序 ...

  10. puk1521 赫夫曼树编码

    Description An entropy encoder is a data encoding method that achieves lossless data compression by ...