疑問:@Autowired的作用?[待解答]


有下面一個Spring的工程,工程結構如下:

 

代碼如下:

applicationContext.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 8         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
 9 
10     <!-- 配置自動掃描 -->
11     <context:component-scan base-package="com.tt.spring"></context:component-scan>
12     
13     <!-- 導入資源文件 -->
14     <context:property-placeholder location="classpath:db.properties"/>
15     
16     <!-- 配置C3P0數據源 -->
17     <bean id="dataSource"
18           class="com.mchange.v2.c3p0.ComboPooledDataSource">
19           <property name="user" value="${jdbc.user}"></property>  
20           <property name="password" value="${jdbc.password}"></property>
21           <property name="driverClass" value="${jdbc.driverClass}"></property>
22           <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
23           
24           <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
25           <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
26     </bean>
27     
28     <!-- 配置Spring的JdbcTemplate -->
29     <bean id="jdbcTemplate"
30           class="org.springframework.jdbc.core.JdbcTemplate">
31           <property name="dataSource" ref="dataSource"></property>
32     </bean>
33     
34     <!-- 配置 NamedParameterJdbcTemplate,該對象可以使用具名參數,其沒有無參數的構造器,所以必須為其構造器指定參數-->
35     <bean id="namedParameterJdbcTemplate" 
36           class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
37           <constructor-arg ref="dataSource"></constructor-arg>
38     </bean>
39 
40 </beans>

db.properties:

1 jdbc.user=root
2 jdbc.password=1234
3 jdbc.driverClass=com.mysql.jdbc.Driver
4 jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring
5 
6 jdbc.initPoolSize=5
7 jdbc.maxPoolSize=10

DepartmentDao.java:

 

EmployeeDao.java:

 JdbcTest.java:

 

疑問:

1.為什么在EmployeeDao類里面對JdbcTemplate進行@Autowired,就可以使用jdbcTemplate對象了?而JdbcTest.java類里必須通過ctx獲取bean的方式獲取到
jdbcTemplate對象?如果在JdbcTest.java類里直接@Autowired對jdbcTemplate進行自動裝配,運行會報錯:空指針異常,為什么會這樣?
2.為什么在EmployeeDao里面對jdbcTemplate進行@Autowired自動轉配,就可以調用jdbcTemplate呢?

3.
@Autowired到底什么作用?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM