有下面一個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到底什么作用?