课程链接:

1    解析

1.1  疑问:2.2去掉@resource注解,为什么不能赋值?不是有set方法了吗?

1.2  @resource注解版本支持

1.3  没有显式指定@resource的那么,默认名称从何获得?

1.4  @postConstruct 和@predestroy注解版本 支持

1.5  @named 和 @inject 依赖注入注解的 版本支持

1.6  @named解惑

2    代码演练

2.1  给变量赋值(方法一)

2.2  给变量赋值(方法二)

2.3  注解PostConstruct 和注解 PreDestroy(前置注解和后置注解)

2.4  注解@named和注解@inject的使用

2.5  注解@named

1    解析

1.1  疑问:2.2去掉@resource注解,为什么不能赋值?不是有set方法了吗?

1.2  @resource注解版本支持

支持版本 JSR-250  java567都支持

1.3  没有显式指定@resource的那么,默认名称从何获得?

属性名或者方法得出,详细参考2.1

1.4  @postConstruct 和@predestroy注解版本 支持

Spring2.5之后支持

1.5  @named 和 @inject 依赖注入注解的 版本支持

    <dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>

1.6  @named解惑

你首先要理解@Named注解是干嘛的?我们使用这个注解是来给我们注入对象的,那么@Named是JSR330中的注解,在这里它相当于@Qualifier,是用来注入在IOC容器已经存在的名称为jsrDao的bean,然而在IOC容器中并没有注册你说的jsr,自然就获取不到将会报错!

2    代码演练

2.1  给变量赋值

实体类:

package com.imooc.beanannotation.javabased;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service
public class JsrService { @Resource
private JsrDao jsrDao; // public void setJsrDao(JsrDao jsrDao) {
// this.jsrDao = jsrDao;
// } public void save(){
jsrDao.save();
}
}

测试类:

package com.imooc.test.beanannotation;

import org.junit.Test;

import com.imooc.beanannotation.javabased.JsrService;
import com.imooc.test.base.UnitTestBase; public class TestJsr extends UnitTestBase{ public TestJsr(){
super("classpath*:spring-beanannotation.xml");
} @Test
public void testJsr(){
JsrService jsrService =super.getbean("jsrService");
jsrService.save();
}
}

dao类:

package com.imooc.beanannotation.javabased;

import org.springframework.stereotype.Repository;

@Repository
public class JsrDao {
public void save(){
System.out.println("JsrDao is saving!");
}
}

xml:

<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan> </beans>

打印日志:

四月 07, 2019 8:03:26 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5fa34e31: startup date [Sun Apr 07 20:03:26 CST 2019]; root of context hierarchy
四月 07, 2019 8:03:27 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from URL [file:/F:/xiangmu3/Xin/FuQiang/Spring/ddwei-dao/target/classes/spring-beanannotation.xml]
四月 07, 2019 8:03:27 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [config.xml]
JsrDao is saving!
四月 07, 2019 8:03:28 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@5fa34e31: startup date [Sun Apr 07 20:03:26 CST 2019]; root of context hierarchy

2.2  给变量赋值(方法二)

实体类:

package com.imooc.beanannotation.javabased;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service
public class JsrService { // @Resource
private JsrDao jsrDao; @Resource
public void setJsrDao(JsrDao jsrDao) {
this.jsrDao = jsrDao;
} public void save(){
jsrDao.save();
}
}

2.3  注解PostConstruct 和注解 PreDestroy(前置注解和后置注解)

实体类:

package com.imooc.beanannotation.javabased;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource; import org.springframework.stereotype.Service; @Service
public class JsrService { // @Resource
private JsrDao jsrDao; @Resource
public void setJsrDao(JsrDao jsrDao) {
this.jsrDao = jsrDao;
} @PostConstruct
public void init(){
System.out.println("init method");
} @PreDestroy
public void destroy(){
System.out.println("destroy method");
} public void save(){
jsrDao.save();
}
}

打印日志:

四月 07, 2019 8:25:30 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7c27a30c: startup date [Sun Apr 07 20:25:30 CST 2019]; root of context hierarchy
四月 07, 2019 8:25:30 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from URL [file:/F:/xiangmu3/Xin/FuQiang/Spring/ddwei-dao/target/classes/spring-beanannotation.xml]
四月 07, 2019 8:25:31 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [config.xml]
init method
JsrDao is saving
!
四月 07, 2019 8:25:31 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@7c27a30c: startup date [Sun Apr 07 20:25:30 CST 2019]; root of context hierarchy
destroy method

2.4  注解@named和注解@inject的使用

实体类:

package com.imooc.beanannotation.javabased;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Named; //@Service
@Named
public class JsrService { // @Resource
@Inject
private JsrDao jsrDao; // @Resource
public void setJsrDao(JsrDao jsrDao) {
this.jsrDao = jsrDao;
} @PostConstruct
public void init(){
System.out.println("init method");
} @PreDestroy
public void destroy(){
System.out.println("destroy method");
} public void save(){
jsrDao.save();
}
}

pom.xml

    <dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>

2.5  注解@named

实体类:

package com.imooc.beanannotation.javabased;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Named; //@Service
@Named
public class JsrService { // @Resource
// @Inject
private JsrDao jsrDao; // @Resource
@Inject
public void setJsrDao(@Named("jsrDao")JsrDao jsrDao) {
this.jsrDao = jsrDao;
} @PostConstruct
public void init(){
System.out.println("init method");
} @PreDestroy
public void destroy(){
System.out.println("destroy method");
} public void save(){
jsrDao.save();
}
}

Spring课程 Spring入门篇 4-9 Spring bean装配之对jsr支持的说明的更多相关文章

  1. Spring Boot -01- 快速入门篇(图文教程)

    Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...

  2. Spring实践系列-入门篇(一)

    本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...

  3. Spring Cloud Alibaba入门篇

    学习条件 了解web三层架构 熟练应用SSM架构 了解Maven管理工具的使用 熟练使用SpringBoot,以及了解SpringBoot基本原理. 了解部分术语:应用.工具.耦合.负载等 温馨提示: ...

  4. Spring Data JPA 入门篇

    Spring Data JPA是什么 它是Spring基于ORM框架(如hibernate,Mybatis等).JPA规范(Java Persistence API)封装的一套 JPA应用框架,可使开 ...

  5. Spring Boot源码(四):Bean装配

    为了演示Spring中对象是如何创建并放到spring容器中,这里新建一个maven项目: 其中pom.xm文件中只引入了一个依赖: <dependencies> <dependen ...

  6. Spring课程 Spring入门篇 2-1 IOC和bean容器

    课程链接: 本节讲了5部分内容,6为项目demo: 1 接口及面向接口编程 2 什么是IOC 3 Spring的bean配置 4 Bean的初始化 5 Demo 自己理解: 1 高层模块和底层模块都依 ...

  7. spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】

    [ 前言]  Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...

  8. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  9. Spring Boot(一):入门篇+前端访问后端

    转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...

随机推荐

  1. 【java】AtomicReference介绍

    本文转载自:http://www.cnblogs.com/skywang12345/p/3514623.html 概要 本章对AtomicReference引用类型的原子类进行介绍.内容包括: Ato ...

  2. Ping命令简单报错介绍

    了解ABC类IP地址:网络.主机.子网.广播. ---------------------------- 学会ping: ping www.baidu.com 网络检测:ping某一主机可以正常启动! ...

  3. Unity---高度解耦和

    介绍 先举一个简单的例子: 在UGUI中新建一个Button和Text,要求实现点击Button改变Text中的文字. 我的第一反应就是在Button上添加一个脚本,获取点击事件来改变Text的内容. ...

  4. Cheerleaders UVA - 11806 计数问题

    In most professional sporting events, cheerleaders play a major role in entertaining the spectators. ...

  5. 1、Numpy基础

    NumPy是什么? NumPy是科学计算的基本包在Python中. 这是一个Python库,它提供了一个多维数组对象, 各种派生的对象(如蒙面数组和矩阵),和一个 快速操作数组的各式各样的例程,包括 ...

  6. 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】

    大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...

  7. HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)

    题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...

  8. C#工具类之XmlNode扩展类

    using System; using System.Linq; using System.Xml; /// <summary> /// XmlNodeHelper /// </su ...

  9. hdu 1237 简单计算器(栈处理)

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  10. PIE SDK地图鹰眼图

    鹰眼图,是GIS的一个基本功能,在鹰眼图上可以像从空中俯视一样查看地图框中所显示的地图在整个图中的位置,是对全局地图的一种概述表达,能够起到很好的空间提示和导航的作用.网上有很多Arcengine 二 ...