SSH框架使用注解后的简化
注释的优势:
1.最简单直接的优势就是减少了配置文件的代码量。
2.注释和Java代码位于一个文件中,而XML 配置采用独立的配置文件。配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
SSH 注解组合使用:
这里我推荐用最后一种。
我们在使用注解前先要在applicationContext.xml文件中加入
<!-- 自动扫描包,也会自动注入解释器,所以不需要 context:annotation-config --> <context:component-scan base-package="news"></context:component-scan>
去掉 context:annotation-config 和用来注入的bean和property
<!-- 原理:自动注入processor解析器,用来解析注解 --> <!-- <context:annotation-config/> --> <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype"> <property name="ns" ref="myNewsService"></property> </bean> <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype"> <property name="nd" ref="myNewsDao"></property> </bean> <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype"> <property name="sf" ref="mySessionFactory" /> </bean>
然后我们在 Action Service Dao 类加入对应的注解@Controller、@Service、@Repository
导入对应包 import org.springframework.stereotype.Controller(Repository Service);
虽然这些只是规范,不对应写也没关系,不过养成良好的代码习惯比较好,建议大家都要这样写。
这里我就不一一举例了,我们只拿Action举例:
先找到Action类在前面加注解:
@Controller("注入实例的名字")如果不写默认自动找到对应action类名称首字母改为小写
当我们不写的时候注意struts.xml中把class也改成默认名字:
<action name="NewsAction_*" class="默认名字" method="{1}">
@Scope("prototype")非单例 注意:这个如果不写单独运行并不会报错,多人访问就会报错。
然后我用注释进一步简化 Action Service Dao 类,去掉里面set方法。
我们只需要在声明变量的前面加注解@Autowired和@Qualifier("bean的名称")
需要导入这两个包:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@Autowired可以单独使用,默认情况下使用 @Autowired 注解会自动注入,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的。所以我们通过 @Qualifier 注释指定注入 Bean 的名称,这样就可以解决异常。