Spring3的IOC的annotation学习笔记
以下记录了一个小小的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学习笔记的更多相关文章
- Spring入门IOC和AOP学习笔记
Spring入门IOC和AOP学习笔记 概述 Spring框架的核心有两个: Spring容器作为超级大工厂,负责管理.创建所有的Java对象,这些Java对象被称为Bean. Spring容器管理容 ...
- Java注解Annotation学习笔记
一.自定义注解 1. 使用关键字 @interface 2. 默认情况下,注解可以修饰 类.方法.接口等. 3. 如下为一个基本的注解例子: //注解中的成员变量非常像定义接口 public @int ...
- IoC容器Autofac学习笔记
一.一个没有使用IoC的例子 IoC的全称是Inversion of Control,中文叫控制反转.要理解控制反转,可以看看非控制反转的一个例子. public class MPGMovieList ...
- JDK5.0 Annotation学习笔记(一)
背景知识: 从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范.注释是以"@注释名"在代码中存在的,还可以添加一些参数值,例如: ...
- Spring中的IOC容器(学习笔记)
如何将Bean配置到Spring的Bean容器中 通过xml配置文件: Bean实现类来自第三方类库:如“DataSource”等 需要命名空间配置如:context,aop,mvc等 ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Hibernate 马士兵 学习笔记 (转)
目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...
随机推荐
- 十一长假我肝了这本超硬核PDF,现决定开源!!
写在前面 在 [冰河技术] 微信公众号中的[互联网工程]专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了,但就是不 ...
- Solr单机安装
Solr单机安装 一.下载 自行到官网下载所需版本即可,我这里使用的是solr-7.1.0solr官网:http://archive.apache.org/dist/lucene/solr/ 二.安装 ...
- Activiti6.0获取下一节点任务的心路历程
在我的开发任务中,我被分配了一个像下一个节点审批人发送短信的任务,这个任务看起来非常的简单,但在开发过程中遇到了许多的坑,在这里进行记录,如果你想要快速知道结果,请看代码版本(3). 首先,就是获取下 ...
- 蒲公英 · JELLY技术周刊 Vol.25 · Webpack 5 正式发布,你学废了么
蒲公英 · JELLY技术周刊 Vol.25 阔别两年,Webpack 5 正式发布了,不仅清理掉很多冗余的功能,同样也为我们带来了很多新鲜的能力,不论是默认开启的持久缓存,还是反病毒保护,亦或者被其 ...
- 持续集成工具之jenkins+sonarqube做代码扫描
上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...
- jmeter_04_常用取样器
目录 常用取样器详解 http取样器 1.1 基本配置 1.2 高级配置 jdbc取样器 2.1 JDBC Connection Configuration 2.1.1 **Variable Name ...
- spring boot:方法中使用try...catch导致@Transactional事务无效的解决(spring boot 2.3.4)
一,方法中使用try...catch导致@Transactional事务无效的解决方法 1,问题的描述: 如果一个方法添加了@Transactional注解声明事务, 而方法内又使用了try catc ...
- spring boot:使接口返回统一的RESTful格式数据(spring boot 2.3.1)
一,为什么要使用REST? 1,什么是REST? REST是软件架构的规范体系,它把资源的状态用URL进行资源定位, 以HTTP动作(GET/POST/DELETE/PUT)描述操作 2,REST的优 ...
- centos8环境判断当前操作系统是否虚拟机或容器
一,阿里云ECS的centos环境 1,执行systemd-detect-virt [root@yjweb ~]# systemd-detect-virt kvm 说明阿里云的ecs是在一个kvm环境 ...
- JS获取DropDownList选择项的值
var dropDownList= document.getElementById("<%=DropDownListID.ClientID %>");//获取DropD ...