创建bean对象
<bean id ="dataSource" class="prj_1.JDBCDataSource">
<property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=UTC"></property>
<property name="user" value="root"></property>
<property name="pwd" value="root"></property>
<property name="characterEncoding" value="utf-8"></property>
<property name="useUnicode" value="true"></property>
</bean>
<bean id="UserDAO" class = "DAO.UserDAO">
<property name="dataSource" ref = "dataSource"></property>
</bean>
<bean id="UserDAO" class = "DAO.UserDAO" autowire="byType">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
autoType使用:
<bean id="UserDAO" class = "DAO.UserDAO" autowire="byType">
</bean>
可以达到相同效果,自动装配dataSource对象。
注入集合:
<bean id ="Bean" class="com.util.Bean">
<property name="cities">
<list>
<value>Jack</value>
<value>Tom</value>
</list>
</property>
</bean>
<bean id ="Bean" class="com.util.Bean">
<property name="cities">
<set>
<value>Jack</value>
<value>Tom</value>
</set>
</property>
</bean>
<bean id ="Bean" class="com.util.Bean">
<property name="cities">
<map>
<entry key="101" value="Jack"></value>
<entry key="102" value="Tom"></value>
</map>
</property>
</bean>
<bean id ="messageBean" class="com.util.MessageBean">
<property name="friends">
<pops>
<prop key="name">root</value>
<prop key="password">root</value>
</property>
</bean>
引用方式List集合注入
<util:list id="list1">
<value>Jack</value>
<value>Tom</value>
</util:list>
<bean id ="messageBean" class="com.util.MessageBean">
<property name="friends" ref="message2">
</bean>
使用jdbc.properties配置jdbc,mysql数据库连接信息
特别注意:#{***},井号
<util:properties id ="jdbc" location="classpath:jdbc.properties"/>
<bean id ="dataSource" class="prj_1.JDBCDataSource">
<property name="driver" value="#{jdbc.driver}"></property>
<property name="url" value="#{jdbc.url}"></property>
<property name="user" value="#{jdbc.user}"></property>
<property name="pwd" value="#{jdbc.pwd}"></property>
<property name="characterEncoding" value="#{jdbc.characterEncoding}"></property>
<property name="useUnicode" value="#{jdbc.useUnicode}"></property>
</bean>
jdbc.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
user=root
pwd=root
characterEncoding=utf-8
useUnicode=true
扫描注解方式:
<context:component-scan base-package="DAO,prj_1"/>
<util:properties id ="jdbc" location="classpath:jdbc.properties"/>
注:第一次写的时候,大意了包含User类的包DAO,base-package="DAO",却忘记了将包含JDBCDataSource的prj_1包添加至扫描包中,所以一直出错,而且提示错误在userDao中,所以不好找了。
@Component("dataSource")
public class JDBCDataSource {
private String driver; // 1
@Value("#{jdbc.url}")
private String url;
@Value("#{jdbc.user}")
private String user;
@Value("#{jdbc.pwd}")
private String pwd;
@Value("#{jdbc.characterEncoding}")
private String characterEncoding;
@Value("#{jdbc.useUnicode}")
private String useUnicode;
public String getCharacterEncoding() {
return characterEncoding;
}
@Value("#{jdbc.driver}") // 2
public void setDriver(String driver) throws Exception {
System.out.println("执行getjdbc.driver"); // 3
Class.forName(driver);
this.driver = driver;
}
注:对于driver变量的注解,如果写在1处的化,则代码3,不会执行
@Repository("userDAO")
public class JdbcUserDao implements UserDAO, Serializable{
private JDBCDataSource dataSource; // 1
@Autowired
public void setDataSource(@Qualifier("dataSource")JDBCDataSource dataSource) { // 2
System.out.println("!!.dataSource"); // 3
this.dataSource = dataSource;
}
注:与上面的一样的,如果把@Autowired放在1前面,也是可以的,但这3就不会执行了
JDBCDataSource dataSource = (JDBCDataSource) applicationContext.getBean("dataSource");
UserDAO userDAO = (UserDAO)applicationContext.getBean("userDAO");
此处的bean名字由类眉头的注解指定