@postconstruct注解方法没有执行_把对象的创建交给spring来管理(注解IOC)

1ea6d15bf2e01a7f291a20dbfe903ac8.png

bc16d589a66e9a033e450f2708db9b8a.png
自动按照类型注入

/**
* 账户的业务层实现类
*
* 曾经XML的配置:
* <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"
* scope="" init-method="" destroy-method="">
* <property name="" value="" | ref=""></property>
* </bean>
*
* 用于创建对象的
* 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的
* Component:
* 作用:用于把当前类对象存入spring容器中
* 属性:
* value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
* Controller:一般用在表现层
* Service:一般用在业务层
* Repository:一般用在持久层
* 以上三个注解他们的作用和属性与Component是一模一样。
* 他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰
*
*
* 用于注入数据的
* 他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的
* Autowired:
* 作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
* 如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
* 如果Ioc容器中有多个类型匹配时:
* 出现位置:
* 可以是变量上,也可以是方法上
* 细节:
* 在使用注解注入时,set方法就不是必须的了。
* Qualifier:
* 作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)
* 属性:
* value:用于指定注入bean的id。
* Resource
* 作用:直接按照bean的id注入。它可以独立使用
* 属性:
* name:用于指定bean的id。
* 以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
* 另外,集合类型的注入只能通过XML来实现。
*
* Value
* 作用:用于注入基本类型和String类型的数据
* 属性:
* value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)
* SpEL的写法:${表达式}
*
* 用于改变作用范围的
* 他们的作用就和在bean标签中使用scope属性实现的功能是一样的
* Scope
* 作用:用于指定bean的作用范围
* 属性:
* value:指定范围的取值。常用取值:singleton prototype
*
* 和生命周期相关 了解
* 他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
* PreDestroy
* 作用:用于指定销毁方法
* PostConstruct
* 作用:用于指定初始化方法
*/

fa5a7f471fc31b2a1080ab6509db4732.png

AccountDaoImpl

package com.itheima.dao.impl;import com.itheima.dao.IAccountDao;
import org.springframework.stereotype.Repository;/*** 账户的持久层实现类*/
@Repository("accountDao1")
public class AccountDaoImpl implements IAccountDao{public  void saveAccount(){System.out.println("保存了账户1111111111111");}
}

AccountDaoImpl2

package com.itheima.dao.impl;import com.itheima.dao.IAccountDao;
import org.springframework.stereotype.Repository;/*** 账户的持久层实现类*/
@Repository("accountDao2")
public class AccountDaoImpl2  implements IAccountDao {public  void saveAccount(){System.out.println("保存了账户2222222222222");}
}

IAccountDao

package com.itheima.dao;/*** 账户的持久层接口*/
public interface IAccountDao {/*** 模拟保存账户*/void saveAccount();
}

AccountServiceImpl

package com.itheima.service.impl;import com.itheima.dao.IAccountDao;
import com.itheima.service.IAccountService;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;/*** 账户的业务层实现类** 曾经XML的配置:*  <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"*        scope=""  init-method="" destroy-method="">*      <property name=""  value="" | ref=""></property>*  </bean>** 用于创建对象的*      他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的*      Component:*          作用:用于把当前类对象存入spring容器中*          属性:*              value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。*      Controller:一般用在表现层*      Service:一般用在业务层*      Repository:一般用在持久层*      以上三个注解他们的作用和属性与Component是一模一样。*      他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰*** 用于注入数据的*      他们的作用就和在xml配置文件中的bean标签中写一个<property>标签的作用是一样的*      Autowired:*          作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功*                如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。*                如果Ioc容器中有多个类型匹配时:*          出现位置:*              可以是变量上,也可以是方法上*          细节:*              在使用注解注入时,set方法就不是必须的了。*      Qualifier:*          作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)*          属性:*              value:用于指定注入bean的id。*      Resource*          作用:直接按照bean的id注入。它可以独立使用*          属性:*              name:用于指定bean的id。*      以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。*      另外,集合类型的注入只能通过XML来实现。**      Value*          作用:用于注入基本类型和String类型的数据*          属性:*              value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)*                      SpEL的写法:${表达式}** 用于改变作用范围的*      他们的作用就和在bean标签中使用scope属性实现的功能是一样的*      Scope*          作用:用于指定bean的作用范围*          属性:*              value:指定范围的取值。常用取值:singleton prototype** 和生命周期相关 了解*      他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的*      PreDestroy*          作用:用于指定销毁方法*      PostConstruct*          作用:用于指定初始化方法*/
@Service("accountService")
//@Scope("prototype")
public class AccountServiceImpl implements IAccountService {//    @Autowired
//    @Qualifier("accountDao1")@Resource(name = "accountDao2")private IAccountDao accountDao = null;@PostConstructpublic void  init(){System.out.println("初始化方法执行了");}@PreDestroypublic void  destroy(){System.out.println("销毁方法执行了");}public void  saveAccount(){accountDao.saveAccount();}
}

IAccountService

package com.itheima.service;/*** 账户业务层的接口*/
public interface IAccountService {/*** 模拟保存账户*/void saveAccount();
}

Client

package com.itheima.ui;import com.itheima.service.IAccountService;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模拟一个表现层,用于调用业务层*/
public class Client {/*** @param args*/public static void main(String[] args) {//1.获取核心容器对象
//        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.根据id获取Bean对象IAccountService as  = (IAccountService)ac.getBean("accountService");
//        IAccountService as2  = (IAccountService)ac.getBean("accountService");
//        System.out.println(as);
//        IAccountDao adao = ac.getBean("accountDao",IAccountDao.class);
//        System.out.println(adao);
//        System.out.println(as == as2);as.saveAccount();ac.close();}
}

bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--告知spring在创建容器时要扫描的包,配置所需要的标签不是在beans的约束中,而是一个名称为context名称空间和约束中--><context:component-scan base-package="com.itheima"></context:component-scan>
</beans>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.itheima</groupId><artifactId>day02_eesy_01anno_ioc</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency></dependencies>
</project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes初步学习

今天分享如题&#xff1a; Kubernetes 本篇内容源于工作项目需要自学 但K8s确实现在十分的主流so推荐给大家 最近更新缓慢由于工作太忙惹&#xff0c;忙里偷闲整理愿分享能与君共勉&#x1f4aa; 大家新年快乐&#x1f389; &#x1f508;言归正题&#xff0c;相信很多朋友…

CABAC编码

H&#xff0e;264&#xff0f;AVC标准采用了很多新技术和新方法&#xff0c;大大提高了视频编码效率&#xff0c;其中CABAC便是H&#xff0e;264&#xff0f;AVC采用的新型熵编码方法之一。CABAC采用了高效的算术编码思想&#xff0c;同时充分考虑了视频流相关统计特性&#xf…

【教程分享】Jmeter入门教程

好&#xff01;回归学长每周的教程分享&#xff01; PART2 >今天又来分享Jmter 因为最近好像有相关工作内容 提前准备资修一下 分享仅供参考- JMeter的作用对软件做压力测试 1.能够对HTTP和FTP服务器进行压力和性能测试&#xff0c; 也可以对任何数据库进行同样的测试&…

快速傅里叶变换python_FFT快速傅里叶变换的python实现过程解析

FFT是DFT的高效算法&#xff0c;能够将时域信号转化到频域上&#xff0c;下面记录下一段用python实现的FFT代码。 # encodingutf-8 import numpy as np import pylab as pl # 导入和matplotlib同时安装的作图库pylab sampling_rate 8000 # 采样频率8000Hz fft_size 512 # 采样…

rabbitmq的安装全过程

2019独角兽企业重金招聘Python工程师标准>>> 1 首先下载安装依赖elang 添加yum支持 cd /usr/local/src/ mkdir rabbitmq cd rabbitmq wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm rp…

【框架学习分享】HttpRunner

今天文章分为两部分 :) PART1 HttpRunner内容分享/ PART2 关于后厂村儿 10 Minutes HttpRunner: PART 1 首先感谢作者开源&#x1f44d; 因为最近工作需要用到HttpRunner&#xff0c; 于是便趁着周末学了下这个测试框架&#xff0c;感觉还可以~ 所以分享一下今天的学习记…

python报名_2019年少儿Python创意编程比赛报名时间

2019年Python创意编程比赛时间及相关规定&#xff1a;参赛对象 Python创意编程比赛设初中组和高中组。 全国各地初中、高中(含中等职业学校)在校学生均以个人名义报名参加。 参赛步骤 Python创意编程比赛分初评、复评和终评三个阶段&#xff0c;初评和复评以线上形式开展&#…

【分享】后厂村鲜为人知的另一面

好&#xff01;回归学长每周的杂谈分享&#xff01; 有人说“后厂村”像一座孤岛&#xff0c; 这里远离喧嚣&#xff0c;没有生活气息。 而刚刚到厂的学长&#xff0c; 却想和你分享他鲜为人知的另一面。 内容整理源于网络看客原创侵删 说起后厂村&#xff0c;也许是老北京人…

windows 下安装rabbitmq

2019独角兽企业重金招聘Python工程师标准>>> 1、下载 下载地址&#xff1a;http://www.rabbitmq.com/download.html 2、Windows上安装 2.1 安装安装Erlang 下载erlang&#xff1a;http://www.erlang.org/download/otp_win64_17.3.exe 安装&#xff1a; erlang安装完…

【Kubernetes】k8s 的基本使用指令

今天分享如题&#xff1a; Kubernetes 最近更新缓慢由于工作太忙惹&#xff0c;忙里偷闲整理愿能与君共勉&#x1f4aa; K8S对我来说是个新的技术栈&#xff0c;程序员就是需要一直充电&#x1f50b; 加油&#xff0c;一起进步&#x1f4aa; 结构模型 k8s 是经典的一对多模…

c语言 malloc_C语言快速入门——动态内存分配

在前面一系列的字符串操作中&#xff0c;我们都是先定义一个固定大小的字符数组&#xff0c;然后根据所需&#xff0c;或拷贝、或连接、或格式化来为这个数组提供内容。固定大小的数组意味着在程序运行期间&#xff0c;数组所占用的内存是确定的(即划分了固定数量的内存)&#…

【经验分享】工程开发与Coding规范

今天分享分为两部分 :) PART01 工程开发代码规范分享/ PART02 关于某易云自动签到听歌分享- 5Mins DevCoding Rule: PART 1 了解真实工程开发&#x1f3d7;..... 本篇内容分享的宗旨: 学长工作经验之谈仅作分享&#x1f3f7; Ready,Go 代码管理——工具篇 •工程上首先需要…

过滤器与拦截器区别

过滤器与拦截器区别 参考&#xff1a;http://www.cnblogs.com/dreamroute/p/4198087.html?utm_sourcetuicool 过滤器 过滤器是一个程序&#xff0c;它先于与之相关的servlet或JSP页面运行在服务器上。它是随你的web应用启动而启动的&#xff0c;只初始化一次&#xff0c;以后就…

二进制-高效位运算

数独 数独是介绍位运算的好例子&#xff0c;运用位运算和不运用效率差别还是挺大的。我们先看数独需求: 1、当前数字所在行数字均含1-9&#xff0c;不重复 2、当前数字所在列数字均含1-9&#xff0c;不重复 3、当前数字所在宫&#xff08;即3x3的大格&#xff09;数字均含1-9&a…

pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...

晓查 发自 凹非寺量子位 报道 | 公众号 QbitAIFacebook在PyTorch开发者大会上正式推出了PyTorch 1.3&#xff0c;并宣布了对谷歌云TPU的全面支持&#xff0c;而且还可以在Colab中调用云TPU。之前机器学习开发者虽然也能在Colab中使用PyTorch&#xff0c;但是支持云TPU还是第一次…

Android Studio主题设置、颜色背景配置

2019独角兽企业重金招聘Python工程师标准>>> color-themes 效果展示 打开http://color-themes.com/有很多样式可供选择 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 导入方式 下载主…

Java多线程实现异步调用

在Java平台,实现异步调用的角色有如下三个角色&#xff1a;调用者、 提货单 、真实数据&#xff0c;一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单 .然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕&#xff0c;不需要等蛋糕做出来(假设现做要很长…

sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...

为大家整理了常用的Windows操作系统和安装软件&#xff0c;基本上都是经过我们项目测试OK的版本&#xff0c;以后项目调试就齐全了&#xff0c;不用再“东奔西走”&#xff0c;“小鹿乱撞”了。整理不易&#xff0c;若对您有帮助请关注并转发&#xff0c;以便帮助到更多的人。I…

Android ToolBar 使用完全解析

ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar&#xff0c;由于其高度的可定制性、灵活性、具有Material Design风格等优点&#xff0c;越来越多的应用也用上了ToolBar&#xff0c;比如常用的知乎软件其顶部导航栏正是使用ToolBar。官方考虑…

【零散积累】传输文件(sz/rz/scp命令)

来自wiki迁移页面路径&#xff1a;刘旺的主页 / 个人零散积累 / 01> 传输文件&#xff08;sz/rz/scp命令&#xff09; 工作中的传输文件会出现在linux之间&#xff0c;或者linux与windows之间。 一、怎么实现linux与windows之间的文件传输&#xff1f; 1.sz和rz是什么 s…