以下记录了一个小小的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. 面经手册 · 第13篇《除了JDK、CGLIB,还有3种类代理方式?面试又卡住!》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 编程学习,先铺宽度还是挖深度? 其实技术宽度与技术深度是相辅相成的,你能了解多少技术 ...

  2. 动画演示Sunday字符串匹配算法——比KMP算法快七倍!极易理解!

    前言 上一篇我用动画的方式向大家详细说明了KMP算法(没看过的同学可以回去看看). 这次我依旧采用动画的方式向大家介绍另一个你用一次就会爱上的字符串匹配算法:Sunday算法,希望能收获你的点赞关注收 ...

  3. 理解 PHP 依赖注入 和 控制反转

    理解 PHP 依赖注入 和 控制反转   要想理解 PHP 依赖注入 和 控制反转 两个概念,就必须搞清楚如下的两个问题: DI -- Dependency Injection 依赖注入 IoC -- ...

  4. selenium-无窗口模式

    引入options即可 from time import sleep from selenium import webdriver from selenium.webdriver.chrome.opt ...

  5. 如何高效定义和验证restful请求的参数

    go-zero针对文本的序列化和反序列化主要在三个地方使用 http api请求体的反序列化 http api返回体的序列化 配置文件的反序列化 完整示例可参照下面这篇文章: 快速构建高并发微服务 1 ...

  6. PHP实现Bitmap的探索 - GMP扩展使用

    原文地址:https://blog.fanscore.cn/p/22/ 一.背景 公司当前有一个用户群的系统,核心功能是根据不同的条件组去不同的业务线中get符合条件的uid列表,然后存到redis中 ...

  7. .Net Core API 发布到IIS后,如何配置SSL详细步骤

    一.首先,我们要将API发布到IIS,不脱机工作.但是这里会有问题,调用接口时,会返回 也就是说,我们需要配置SSL.接下来我们就来详细说明. 二.域名商提供SSL证书审核. 我的域名提供商是腾讯,直 ...

  8. onedrive同步其他任意文件夹

    经过多次尝试,成功同步其他文件夹内容到onedrive,最后那次尝试是成功的,前面是可能犯的错误.注意3点:1. 用管理员身份运行cmd:2. 路径有空格时用双引号括起来:3. /d后面接的第一个路径 ...

  9. (PatchGANs)Pecomputed Real-time Texture Synthesis With Markovian Generative Adversarial Networks

    Introduction: Deconvolution;   Computational costs; Strided convolutional nets; Markov patches; 1. Q ...

  10. centos8 curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small

    centos8操作系统,curl -k https:/www.xxx.com 报错  curl: (35) error:141A318A:SSL routines:tls_process_ske_dh ...