@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.pswp.cn/news/455740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決-ubuntu 安裝redis無法啟動

解決-ubuntu 安裝redis無法啟動 環境 Ubuntu 16.04 Port 6379 Redis version 5:4.0.9-1 1-安裝 apt install redis2-安裝完成-自啟時提示啟動服務失敗 Errors were encountered while processing:redis-serverredis E: Sub-process /usr/bin/dpkg returned an error code (1…

JavaScript中的數據類型轉換

js數據類型轉換 使用&#xff1a;Number&#xff08;&#xff09;、parseInt() 和parseFloat&#xff08;&#xff09; 做類型轉換 Number()強轉一個數值(包含整數和浮點數)。*parseInt()強轉整數&#xff0c;*parseFloat&#xff08;&#xff09;強轉浮點數函數isNaN()檢測參…

web.xml(8)_jsp-config

13.jsp-config jsp-config元素主要用來設定JSP的相關配置,<jsp:config>包含<taglib>和<jsp-property-group>兩個子元素.當中<taglib>元素 在JSP 1.2時就已經存在了;而<jsp-property-group>是JSP 2.0新增的元素. taglib :對標記庫描寫敘述符文件&…

CABAC之手把手教你編碼

首先要說明的是CABAC的生命期是SLICE,因此本篇所講的也是一個SLICE里CABAC的流程,其次對于我們來說場模式幾乎用不到,所以本文的編碼流程只使用幀模式,因此實際上用到的表只有277個, 當然如果我寫成399, 不是說里面所有表都用到的. 這里只是聲明一下這個問題, 如果大家實際操作…

python網絡攻擊代碼_Python-python網絡編程寫arp攻擊代碼

from scapy.all import ARP,send,arping import sys,re,random,time stdoutsys.stdout ip IPADDR"192.168.1.102" 網關 gateway_ip"192.168.1.1" tmp[] 偽造網關mac地址 for i in range(0,6): tmp.append(str("%02x"%random.randint(0x01,0xfe))…

Kubernetes初步學習

今天分享如題&#xff1a; Kubernetes 本篇內容源于工作項目需要自學 但K8s確實現在十分的主流so推薦給大家 最近更新緩慢由于工作太忙惹&#xff0c;忙里偷閑整理愿分享能與君共勉&#x1f4aa; 大家新年快樂&#x1f389; &#x1f508;言歸正題&#xff0c;相信很多朋友…

手機界面常見的的九宮格

手機界面常見的的九宮格 手機界面常見的的九宮格 首先布局的話需要用到一個mainactivity和一個item的布局目前用得最多也最熟悉的還是LinearLayout布局所以&#xff0c;一下也是&#xff0c;按套路就不過多贅述了。 <GridView android:layout_width"wrap_content"…

JavaScript中的運算符

js運算符 算 字 賦 比 邏 位 它算術運算符 - * / --字符串連接 賦值運算 - %比較運算符 < > > < ! !邏輯運算符 && || !位運算 ^ & | << >>其它運算符 ? : 三元運算符 delete&#xff1…

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; 也可以對任何數據庫進行同樣的測試&…

linux 特殊shell變量

特殊變量 環境變量&#xff1a; 系統本身運行需要由linux系統提前創建好的一類變量 主要用于用戶的工作環境&#xff0c;包括&#xff08;用戶的宿主目錄&#xff0c;命令的查找路徑&#xff0c;用戶的當前目錄&#xff0c;登錄的終端等&#xff09;環境變量的值由操作系統本身…

JavaScript中的循環

js循環 程序中進行有規律的重復性操作&#xff0c;需要用到循環語句。 break 和 continue 語句對循環中的代碼執行提供了更嚴格的控制。 for循環 for(var i0;i<len;i){...... }while循環 var i0;while(i<8){......i;}for-in 語句 for-in 語句是嚴格的迭代語句&…

快速傅里葉變換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;感覺還可以~ 所以分享一下今天的學習記…

x264 移植到 ARM的方法

1。Linux下編譯X264&#xff1a; 其實在windows下使用vc已經編譯過了&#xff0c;不過聽到有人說在linux下編好了&#xff0c;我也就嘗試做一下&#xff0c;況且x264源代碼的makefile已經做好了&#xff0c;我只需要做的就是把文件copy一下&#xff0c;然后make 一下就可以了。…

JavaScript中的元素獲取與操作

js元素獲取與操作 可以使用內置對象document上的getElementById方法來獲取頁面上設置了id屬性的元素&#xff0c;獲取到的是一個html對象&#xff0c;然后將它賦值給一個變量&#xff0c;比如&#xff1a; <script type"text/javascript">var oDiv document…

VUE2第五天學習---自定義指令

閱讀目錄 1.理解VUE中的自定義指令回到頂部1.理解VUE中的自定義指令 默認核心指令有 (v-model 和 v-show), 但是有時候我們需要用到自定義指令&#xff0c;在vue中&#xff0c;代碼復用主要形式和抽象是組件&#xff0c;但是在有的情況下&#xff0c;我們仍然需要對DOM元素進行…

python報名_2019年少兒Python創意編程比賽報名時間

2019年Python創意編程比賽時間及相關規定&#xff1a;參賽對象 Python創意編程比賽設初中組和高中組。 全國各地初中、高中(含中等職業學校)在校學生均以個人名義報名參加。 參賽步驟 Python創意編程比賽分初評、復評和終評三個階段&#xff0c;初評和復評以線上形式開展&#…

【分享】后廠村鮮為人知的另一面

好&#xff01;回歸學長每周的雜談分享&#xff01; 有人說“后廠村”像一座孤島&#xff0c; 這里遠離喧囂&#xff0c;沒有生活氣息。 而剛剛到廠的學長&#xff0c; 卻想和你分享他鮮為人知的另一面。 內容整理源于網絡看客原創侵刪 說起后廠村&#xff0c;也許是老北京人…