参考答案
List集合注入方式的配置如下:
<bean id="messageBean" class="com.util.MessageBean" > <property name="friends"> <list> <value>Jack</value> <value>Tom</value> </list> </property> </bean>
Map集合注入方式的配置如下:
<bean id="messageBean" class="com.util.MessageBean" > <property name="books"> <map> <entry key="1001" value="Java语言基础"></entry> <entry key="1002" value="Java Web基础“></entry> <entry key="1003" value="Spring使用基础“></entry> </map> </property> </bean>
Properties集合注入方式的配置如下:
<bean id="messageBean" class="com.util.MessageBean" > <property name="dbParams"> <props> <prop key="username">root</prop> <prop key="password">1234</prop> <prop key="driverClassName"> com.mysql.jdbc.Driver </prop> </props> </property> … </bean>
参考答案
步骤一:新建工程,导入jar包
新建名为SpringIoC_02_exec的web工程,在该工程导入如图-1所示的5个jar包。
图– 1
步骤二:新建DeptDAO,模拟JDBC实现对员工的增删改操作的接口
代码如下所示:
package org.tarena.dao; public interface DeptDAO { public void add(); public void delete(); public void update(); }
步骤三:新建该类JdbcDeptDAO,模拟实现DeptDAO接口
使用注解@Repository表示持久层组件,代码如下所示:
package org.tarena.dao; import org.springframework.stereotype.Repository; @Repository public class JdbcDeptDAO implements DeptDAO{ public void add() { System.out.println("利用JDBC技术保存Dept信息"); } public void delete() { System.out.println("利用JDBC技术删除Dept信息"); } public void update() { System.out.println("利用JDBC技术更新Dept信息"); } }
步骤四:新建DeptService类
新建DeptService类,在该类中调用DeptDAO的add方法、update方法以及delete方法,并使用注解“@Resource”,将DeptDAO给DeptService注入,代码如下所示:
package org.tarena.service; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.tarena.dao.DeptDAO; @Service public class DeptService { private DeptDAO dao; @Resource public void setDao(DeptDAO dao) { this.dao = dao; } public void addDept(){ System.out.println("添加部门操作处理"); dao.add(); } public void deleteDept() { System.out.println("删除部门操作处理"); dao.delete(); } public void updateDept() { System.out.println("修改部门操作处理"); dao.update(); } }
@Resource注解标记可以用在字段定义或setter方法定义前面,默认首先按名称匹配注入,然后按照类型匹配注入。
步骤五:新建applicationContext.xml
该文件的核心代码如图-2所示。
图– 2
步骤六:新建类Test
新建类Test中,调用DeptService的addDept方法、updateDept方法以及deleteDept方法,进而调用DeptDAO的add方法、update方法以及delete方法,代码如图-3所示。
图– 3
步骤七:运行Test类
运行Tes1类,控制台的输出结果如图-4所示。
图- 4
从输出结果可以看出调用到了DeptDAO接口中的add方法、update方法以及delete方法,使用setter注入的方式将DeptDAO给DeptService注入成功。
DeptDAO接口的完整代码如下所示:
package org.tarena.dao; public interface DeptDAO { public void add(); public void delete(); public void update(); }
JdbcDeptDAO类的完整代码如下所示:
package org.tarena.dao; import org.springframework.stereotype.Repository; @Repository public class JdbcDeptDAO implements DeptDAO{ public void add() { System.out.println("利用JDBC技术保存Dept信息"); } public void delete() { System.out.println("利用JDBC技术删除Dept信息"); } public void update() { System.out.println("利用JDBC技术更新Dept信息"); } }
DeptService类的完整代码如下所示:
package org.tarena.service; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.tarena.dao.DeptDAO; @Service public class DeptService { private DeptDAO dao; @Resource public void setDao(DeptDAO dao) { this.dao = dao; } public void addDept(){ System.out.println("添加部门操作处理"); dao.add(); } public void deleteDept() { System.out.println("删除部门操作处理"); dao.delete(); } public void updateDept() { System.out.println("修改部门操作处理"); dao.update(); } }
Test类的完整代码如下所示:
package org.tarena.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.tarena.service.DeptService; public class Test { public static void main(String[] args) throws Exception { String conf = "applicationContext.xml"; ApplicationContext ac = new ClassPathXmlApplicationContext(conf); DeptService service = ac.getBean("deptService", DeptService.class); service.addDept(); service.updateDept(); service.deleteDept(); } }
applicationContext.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" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http:a//www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd"> <context:component-scan base-package="org.tarena" /> </beans>
@Component、@Repository 、@Service、@Scope、@Autowired、@Inject、@Value
参考答案
1. @Component为通用注解。
2. @Repository为持久层组件注解。
3. @Service为业务层组件注解。
4. @Scope为Bean的作用域注解。
5. @Autowired、@Inject为指定Bean之间依赖关系的注解。
6. @Value为注入Spring表达式值的注解。