在上篇讲到SSH框架的搭建后,为了有利于随时能熟练的把一个SSH的项目快速的搭建起来,我又进一步对其了解学习,对代码进行了简化,你们相互讨论学习。java
为何要简化:spring
若是要作一个大项目,假设项目的action层会有上千个Class类,那就要在spring配置中写上千个bean目录,上千个property,这个时候就须要简化了。app
注解:框架
注解分为两种,一是类的注解,二是类中属性的注解ide
注解功能的提供也有二者,一是Spring,二是Jdk (注意:类的注解只有springframework提供的)学习
注解的做用:spa
注解,从名字上看是注释,解释。但功能却不单单是注释那么简单。注解(Annotation) 为咱们在代码中添加信息提供了一种形式化的方法,是咱们能够在稍后 某个时刻方便地使用这些数据(经过 解析注解 来使用这些数据),常见的做用有如下几种:prototype
-----------------------自动装配bean目录-----------------------3d
在Spring配置文件中配置注解解析器,Spring会自动的给Class类中定义的属性装配beancode
首先:在applicationContext.xml中加入自动扫描包:<context:component-scan base-package="news"></context:component-scan>
<!-- 自动扫描包,也会自动注入解释器,因此不须要 context:annotation-config --> <context:component-scan base-package="news"></context:component-scan>
注解@Autowired和@Qualifier("bean的名称")
@Autowired 须要导入:import org.springframework.beans.factory.annotation.Autowired;(spring包自带的)
默认按类型匹配,自动装配,能够写在成员属性上
public class NewsDaoImpl implements NewsDao { @Autowired
@Qualifier("mySessionFactory") private SessionFactory sf; }
先找到Action类在前面加注解:
@Controller("注入实例的名字")若是不写默认自动找到对应action类名称首字母改成小写
当咱们不写的时候注意struts.xml中把class也改为默认名字:
<action name="NewsAction_*" class="默认名字" method="{1}">
@Scope("prototype") 注意:spring 默认scope 是单例模式这样只会建立一个Action对象每次访问都是同一个Action对象,scope="prototype" 能够保证 当有请求的时候 都建立一个Action对象
如下是特殊的(一个bean目录):
@Controller
@Controller(“Bean的名称”)
@Controller @Scope("prototype") public class NewsAction extends ActionSupport { @Autowired private NewsService ns; }
@Repository
@Repository(“Bean的名称”)
@Repository @Scope("prototype") public class NewsDaoImpl implements NewsDao { @Autowired private SessionFactory sf; }
@Service
@Service(“Bean的名称”)
@Service @Scope("prototype") public class NewsServiceImpl implements NewsService { @Autowired private NewsDao nd; }
简化:配置好后,Class类中属性的setter方法能够删除,配置文件中Bean包括property也能够同时删除