找到上次我们搭建的SSH框架
浏览一下原始的applicationContext.xml文件中的部分配置。
1 <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype"> 2 3 <property name="is" ref="myIndexService"></property> 4 5 </bean> 6 7 8 9 <bean id="myIndexService" class="ssh.service.IndexServiceImpl" scope="prototype"> 10 11 <property name="id" ref="myIndexDao"></property> 12 13 </bean> 14 15 16 17 <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype"> 18 19 <property name="sf" ref="mySessionFactory"></property> 20 21 </bean>
上面的代码中可以看出,action控制层访问的是service业务层,而service业务层则是访问dao数据层。
每个类有什么属性要注入都显得非常明显,所以本例要做的就是把applicationContext.xml配置文件进行简化。
接着把applicationContext.xml文件中代码简化成如下代码:
1 <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype"></bean> 2 3 <bean id="myIndexService"class="ssh.service.IndexServiceImpl" scope="prototype"></bean> 4 5 <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype"></bean>
这里只是绑定了每个bean,并没有为其注入属性。其实是用到了Spring的@Autowired和@Qualifier这两个注解。
1 //属性的注解 2 @Autowired 3 @Qualifier("mySessionFactory") 4 private SessionFactory sf;
在Qualifier注解中我们申明其引用的是哪一个bean,Spring 便会自动为其注入这个实例,并且可以省略属性的set方法。
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 5 xmlns:p="http://www.springframework.org/schema/p" 6 xmlns:aop="http://www.springframework.org/schema/aop" 7 8 xmlns:context="http://www.springframework.org/schema/context" 9 xmlns:jee="http://www.springframework.org/schema/jee" 10 11 xmlns:tx="http://www.springframework.org/schema/tx" 12 xsi:schemaLocation=" 13 http://www.springframework.org/schema/aop 14 15 http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 16 http://www.springframework.org/schema/beans 17 18 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 19 http://www.springframework.org/schema/context 20 21 http://www.springframework.org/schema/context/spring-context-4.2.xsd 22 http://www.springframework.org/schema/jee 23 24 http://www.springframework.org/schema/jee/spring-jee-4.2.xsd 25 http://www.springframework.org/schema/tx 26 27 http://www.springframework.org/schema/tx/spring-tx-4.2.xsd" 28 //<context:component-scan base—package="ssh"></context:component-scan>,通过这个节点的base-package属性可以配置Spring需要自动注入的哪个基包 29 <!-- 基于ssh这个包自动扫描其中的类 ,也会自动注入解析器--> 30 <context:component-scan base-package="ssh"></context:component-scan> 31 32 <!-- 引入外部属性文件 --> 33 <context:property-placeholder location="classpath:jdbc.properties" /> 34 35 <bean id="mySessionFactory" 36 class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 37 </bean> 38 39 <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 40 41 </bean> 42 43 </beans>
使用spring注解来对类进行注解: @Controller action层 、 @Service service层 、 @Repository dao层;
1 //action类的类注解 2 @Controller("myIndexAction") 3 @Scope("prototype") 4 public class IndexAction extends ActionSupport { 5 //属性的注解 6 @Autowired 7 //@Qualifier("myIndexService") 8 private IndexService is;
1 //Service类的类注解 2 @Service("myIndexService") 3 @Scope("prototype") 4 public class IndexServiceImpl implements IndexService { 5 6 //属性的注解 7 @Autowired 8 //@Qualifier("myIndexDao") 9 private IndexDao id;
1 //dao类的类注解 2 @Repository("myIndexDao") 3 @Scope("prototype") 4 public class IndexDaoImpl implements IndexDao { 5 //属性的注解 6 @Autowired 7 //@Qualifier("mySessionFactory") 8 private SessionFactory sf;
(注).了解一些我们常用的注解
[email protected]注解--定义控制器(类级别上的注解)action)
[email protected]注解--定义业务处理类(service)
[email protected]注解--定义底层数据库处理接口(dao)
[email protected]注解--实现注入(jdk)
[email protected]("prototype")--//非单例
1 2 3 4 5 6 7 8 9 10 11 |
|