最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

@Autowired注入為null問題原因分析

 更新時間:2018年11月25日 16:47:27   作者:吃魚不挑刺  
這篇文章主要介紹了@Autowired注入為null問題原因分析嗎,小編覺得挺不錯的,對日后比較有幫助,具有一定的參考價值,感興趣的小伙伴們可以參考一下

問題說明

最近看到Spring事務(wù),在學(xué)習(xí)過程中遇到一個很苦惱問題

搭建好Spring的啟動環(huán)境后出現(xiàn)了一點小問題

在啟動時候卻出現(xiàn)[java.lang.NullPointerException]

不過因為當(dāng)時一個小小的疏忽很low的問題 請往下看...

工程結(jié)構(gòu)

代碼片段

spring.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">

  <!-- Spring注解掃描 -->
  <context:component-scan base-package="com.*" />

  <!-- 1. 數(shù)據(jù)源對象: C3P0連接池 -->
  <bean id="dataSource"
    class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="org.h2.Driver"></property>
    <property name="jdbcUrl"
      value="jdbc:h2:tcp://192.168.190.1/~/test"></property>
    <property name="user" value="sa"></property>
    <property name="password" value="123"></property>
  </bean>

  <!-- 2. JdbcTemplate工具類實例 -->
  <bean id="jdbcTemplate"
    class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
  </bean>

  <!-- 3.配置事務(wù) -->
  <bean id="dataSourceTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
  </bean>

</beans>

Test.java

public class Test {
  public static void main(String[] args) {
    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
        "spring.xml");
    ServiceIF service = (ServiceIF) classPathXmlApplicationContext.getBean("serviceImpl");
    service.add("小王", 23);
  }
}

TransactionUtil.java

@Component("transactionUtil")
public class TransactionUtil {

  /**
   * 初始化數(shù)據(jù)源
   */
  @Autowired
  private DataSourceTransactionManager dataSourceTransactionManager;

  /**
   * 開啟事務(wù)
   * 
   * @return
   */
  public TransactionStatus begin() {
    TransactionStatus transaction = dataSourceTransactionManager.getTransaction(new DefaultTransactionDefinition());
    System.out.println(" 開啟事務(wù)成功 ");
    return transaction;
  }

  /**
   * 提交事物
   * 
   * @param transaction
   */
  public void commit(TransactionStatus transaction) {
    dataSourceTransactionManager.commit(transaction);
    System.out.println(" 事物提交成功 ");
  }

  /**
   * 回滾事務(wù)
   * 
   * @param transaction
   */
  public void rollback(TransactionStatus transaction) {
    dataSourceTransactionManager.rollback(transaction);
    System.err.println(" 事物進行回滾 ");
  }
}

ServiceImpl.java

@Service("serviceImpl")
public class ServiceImpl implements ServiceIF {

  @Autowired
  TransactionUtil transactionUtil;

  private TransactionStatus transactionStatus = null;

  @Override
  public void add(String name, Integer age) {
    transactionStatus = transactionUtil.begin();
    try {
      new DaoImpl().add(name, age);
      transactionUtil.commit(transactionStatus);
    } catch (Exception e) {
      System.err.println("ERROR >>> 執(zhí)行出現(xiàn)異常 即將進行回滾操作");
      transactionUtil.rollback(transactionStatus);
    }
  }
}

DaoImpl.java

public class DaoImpl implements DaoIF{

  /**
   * 注入jdbc模板類
   */
  @Autowired
  private JdbcTemplate jdbcTemplate;

  /**
   * 第一條插入語句
   */
  private final String SQL_INSERT_01 = "insert into user values (?,?)";

  /**
   * 添加sql執(zhí)行
   * 
   * @param name
   * @param age
   */
  public void add(String name, Integer age) {
    jdbcTemplate.update(SQL_INSERT_01, name, age);
  }
}

運行結(jié)果

問題分析

解決思路

我在想 為什么會沒有注入進來呢 我明明加了@Autowired注解

后來猜到可能是Spring.xml配置的問題

看完也沒有問題

我就從Java Source一步一步看 發(fā)現(xiàn)....

我靠 我就猜測是不是如果用「new Object()」的方式創(chuàng)建實例后 其class中的Bean的注解會失效呢?

然后我嘗試在ServiceImpl.java中以注解的方式把DaoIF的實例注入到ServiceImpl,

并在DaoImpl.java的類上面添加@Repository,

把ServiceImpl.java中new DaoImpl()替換成注入的daoImpl。

改修代碼

ServiceImpl.java修改后

DaoImpl.java修改后

改修后調(diào)試

其實我懂得也不太多 Spring注入的流程那

首先他會把項目中target -> classes 目錄下的「.class」文件進行解析

通過Spring.xml中的「context:component-scan」進行注解掃描

如果這個路徑下的「.class」文件的類上面是否存在@Component聲明的注解

如果被此類注解修飾,Spring會把所有被注解修飾的bean進行實例化操作 供給@Autowired進行注入

(在spring注解的源碼中@Service和@Repository等等都繼承了@Component注解)

結(jié)論

在使用Spring的Bean容器時 千萬要確保

配置的注解掃描路徑正確

Jar的依賴是否存在

是否在bean的上面加「@Service @Repository @Component … 」

要細心 遇到異常不要緊 慢慢分析!!!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis找不到mapper文件的實現(xiàn)

    MyBatis找不到mapper文件的實現(xiàn)

    這篇文章主要介紹了MyBatis找不到mapper文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java核心技術(shù)之反射

    Java核心技術(shù)之反射

    本文非常詳細的講解了java反射的相關(guān)資料,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • Spring Security permitAll()不允許匿名訪問的操作

    Spring Security permitAll()不允許匿名訪問的操作

    這篇文章主要介紹了Spring Security permitAll()不允許匿名訪問的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA配置Maven的超詳細步驟

    IDEA配置Maven的超詳細步驟

    Maven是一個能使我們的java程序開發(fā)節(jié)省時間和精力,是開發(fā)變得相對簡單,還能使開發(fā)規(guī)范化的工具,下面這篇文章主要給大家介紹了關(guān)于IDEA配置Maven的超詳細步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Java Exchanger并發(fā)類使用方法

    Java Exchanger并發(fā)類使用方法

    這篇文章主要介紹了Java Exchanger并發(fā)類使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 使用Java橋接模式打破繼承束縛優(yōu)雅實現(xiàn)多維度變化

    使用Java橋接模式打破繼承束縛優(yōu)雅實現(xiàn)多維度變化

    這篇文章主要為大家介紹了使用Java橋接模式打破繼承束縛,優(yōu)雅實現(xiàn)多維度變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • JAVA中AES對稱加密和解密過程

    JAVA中AES對稱加密和解密過程

    這篇文章主要為大家詳細介紹了JAVA中AES對稱加密和解密過程,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java基于socket編程相關(guān)知識解析

    Java基于socket編程相關(guān)知識解析

    這篇文章主要為大家詳細解析了Java基于socket編程的相關(guān)知識,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java代碼塊之簡易qq登錄界面及按鈕顏色設(shè)置代碼

    java代碼塊之簡易qq登錄界面及按鈕顏色設(shè)置代碼

    這篇文章主要介紹了java代碼塊之簡易qq登錄界面及按鈕顏色設(shè)置代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java基礎(chǔ)入門 Swing中間容器的使用

    Java基礎(chǔ)入門 Swing中間容器的使用

    這篇文章主要介紹了Java基礎(chǔ)入門 Swing中間容器的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

喀什市| 盐津县| 正安县| 万州区| 永丰县| 右玉县| 邵武市| 五大连池市| 五常市| 怀来县| 长汀县| 民勤县| 扎赉特旗| 盘锦市| 遂溪县| 清水河县| 宝清县| 江西省| 绥芬河市| 沙洋县| 绵阳市| 正蓝旗| 台中县| 舒兰市| 台中市| 崇文区| 襄城县| 镇雄县| 科技| 灵石县| 沙洋县| 沾化县| 德江县| 多伦县| 上蔡县| 安仁县| 竹北市| 荥经县| 五指山市| 井冈山市| 获嘉县|