`

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同时出现。

 

 

1
2
分享到:
评论

相关推荐

    学习Spring笔记_Annotation(注解)_Component

    本篇笔记主要关注Spring中的注解(Annotation)和@Component,这两大概念是Spring框架的重要组成部分,也是理解SpringIoC(控制反转)和AOP(面向切面编程)的基础。 首先,注解(Annotation)是Java提供的一种元...

    Spring技术内幕 学习笔记

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

    学习Spring笔记_Annotation(注解)_Autowired_Qualifier

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

    Spring学习笔记

    Spring学习笔记Spring spring的配置 IOC 依赖注入 基于Xml的注入 基于注释的注入 Spring的自动注入和属性自动注入 AOP 静态代理 动态代理 使用spring实现AOP 基于Annotation实现AOP 基于XML实现AOP ...

    马士兵spring学习笔记

    ### 马士兵Spring学习笔记知识点汇总 ...综上所述,马士兵Spring学习笔记涵盖了Spring的核心概念及其在实际项目中的应用,包括IoC、AOP、整合其他框架等方面的知识点。对于初学者来说,是一份非常有价值的参考资料。

    spring整合Hibernate学习笔记.docx

    在本学习笔记中,我们将深入探讨如何实现这一整合,以及 Spring 中用于简化 Hibernate 操作的 HibernateTemplate 类。 首先,Spring 作为一款全面的后端框架,它提供了 IoC(Inversion of Control,控制反转)和 ...

    spring框架案例学习文档笔记

    ### Spring框架案例学习文档笔记知识点总结 #### 面向抽象编程 - **定义**:面向抽象编程是一种软件设计原则,旨在通过抽象层隔离具体实现细节。这种方式有助于提高代码的可维护性和灵活性。 - **实践**:在Spring...

    spring2.5 学习笔记

    ### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...

    spring mvc学习笔记

    ### Spring MVC 学习笔记之 AOP 面向切面编程详解 #### 一、AOP 概念概述 面向切面编程(Aspect Oriented Programming, AOP)是一种编程范式,它允许程序员定义“切面”来封装那些与业务逻辑本身无关的功能,比如...

    学习spring时的笔记 二

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

    spring 笔记

    【Spring 框架概述】 Spring 是一个广泛使用的 Java 应用开发框架,它主要负责技术整合,通过提供 Inversion of Control (IOC) 和 Aspect-...通过学习和掌握 Spring,开发者能够构建更加健壮、易维护的 Java 应用。

    Java/JavaEE 学习笔记

    Spring学习笔记...............345 第一章 Spring概述..........................345 第二章 Spring IOC(控制反转)........347 第三章 Spring AOP(面向切面编程)..........351 第四章 Spring中的数据访问.............

    spring教程,spring入门

    Spring框架是Java开发中的一个核心框架,以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP...通过Spring教程和笔记,你可以深入理解并运用这些知识,提升你的Java开发能力。

    传智播客 Spring 完全文档 笔记总结

    ### 传智播客 Spring 完全文档 笔记总结 #### 一、Spring入门 ##### 1.1 Spring简介 - **定义**:Spring 是一个开源的控制反转(Inversion of Control, IoC)和面向切面(Aspect Oriented Programming, AOP)的...

Global site tag (gtag.js) - Google Analytics