经过一段日子对SSH的学习,为了有利于随时能熟练的把一个SSH的项目快速的搭建起来,并且在报错的时候,将报错信息和解决

方案记录下来,每天一次的代码练习已成为家常便饭

  所以,在反复练习的时候,发现Spring的配置太繁琐。考虑开发大项目上,假设项目的action层会有上千个Class类,不简化代码的

情况下,就要在Spring的配置中装配上千个actionClass的bean,累抽。。

解决方案:

  在项目中加入注解,让Spring自动的为Class类定义的属性装配bean以及让Spring自动的扫描程序包中的类,隐式的在配置文件中

添加Class类的bean。

  注解分为两种,一是类的注解,二是类中属性的注解

  注解功能的提供也有两者,一是Spring,二是Jdk    (PS:类的注解只有springframework提供的)

在后面--定义Bean的注解,Spring自动扫描器 的声明标签中package的指定,梦逸`会详细的把细节罗列,有附图

---------常用注解--------

--自动装配Bean (选用一种注解就可以)

{ 作用:为Class类中定义的属性注入Class类实例 }

PS:SpringXml中一个bean就是一个Class类的实例

在SpringXml里面配置注解解析器,Spring会自动的给Class类中定义的属性装配bean

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <!-- 配置注解解析器 -->
<context:annotation-config /> </beans>

简化:{配置好后,Class类中属性的setter方法可以删除,SpringXml中Bean_property也可以同时删除}

@Autowired  (Srping框架自带的)

默认按类型匹配,自动装配,可以写在成员属性上,或写在setter方法上

@Autowired(required=true)

一定要找到匹配的Bean,否则抛异常。 默认值就是true

Java代码:

public class BcDaoImpl implements BcDao {

	@Autowired
private SessionFactory sf; } 

@Autowired

@Qualifier("bean的名字")

按名称装配Bean,与@Autowired组合使用,解决Spring按类型匹配找到多个Bean并给之装配的问题。

Java代码:

public class BcDaoImpl implements BcDao {

	@Autowired
@Qualifier("sessionFactory")
private SessionFactory sf; }

  

@Resource  (Jdk提供的)

默认按名称装配,当找不到名称匹配的bean再按类型装配.

将注解声明在成员属性的上方

可以通过@Resource(name="beanName") 指定要被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.

@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.

Java代码:

public class BcDaoImpl implements BcDao {

	@Resource(name="sessionFactory")
private SessionFactory sf; }

  

@Inject   (Jdk提供的)

按类型装配,功能比@Autowired少,没有使用的必要。

Java代码:

public class BcDaoImpl implements BcDao {

	@Inject()
private SessionFactory sf; }

--定义Bean的注解

在SpringXml中配置自动扫描器

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <!-- 配置程序包自动扫描器 -->
<context:component-scan base-package="app" /> <!--
使用自动扫描包的情况下
base-package属性的值就是一个包名
前提是action(Controller)包 、service包、dao包3个子包必须都在同一个主包里面 下面梦逸附一张图给大家看看^_^
--> </beans>

简化:{配置好后,Class对应在Spring中的bean就可以都删除掉,Spring会隐式的添加Class类的bean,所以就看不到代码,有没有感觉清爽多了?   ^_^ }

PS:使用了<context:component-scan base-package="" />标签后,就可以不需要<context:annotation-config  />标签了,因为自动扫描器标签除了会隐式的添加bean,同时也会自动的给Class类中的

属性装配bean

附图:

(PS:若想该bean每次被调用都创建出一个实例,必须在bean注解的后面使用注解@Scope("")指定作用域)

@Controller

@Controller("bean的Id属性值,即Bean的名称")

定义控制层的Bean,如Action

Java代码:

@Controller
@Scope("prototype")
public class BcAction extends ActionSupport {
@Autowired
private BcService bs; private List<BookCard> bcList = new ArrayList<BookCard>();
public List<BookCard> getBcList() {
return bcList;
}
}

  

 

@Service

@Service("bean的Id属性值,即Bean的名称")

定义业务层的Bean

Java代码:

@Service
@Scope("prototype")
public class BcServiceImpl implements BcService {
@Autowired
private BcDao bd; @Override
public List<BookCard> getAllBc() {
// TODO Auto-generated method stub
return bd.getAllBc();
}
}

  

 

@Repository

@Repository("bean的Id属性值,即Bean的名称")

定义DAO{数据库数据表的操作}层的Bean

Java代码:

@Repository
@Scope("prototype")
public class BcDaoImpl implements BcDao { @Autowired
private SessionFactory sf; }

  

 

@Component

定义Bean, 不好归类时使用.

Java代码:

@Component("bcDao") //可以在小括号中指定bean的id名称,不指定就写@Component
public class BcDaoImpl implements BcDao { @Autowired
private SessionFactory sf; }

  

  

-----------------------------------------------------------------------------

(完)                梦逸、原创,转载请注明原文地址

  

  

SSH项目Class类的注解与属性的注解的更多相关文章

  1. JAVAEE——SSH项目实战06:统计信息管理、Spring注解开发和EasyUI

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7190925.html 一.统计信息管理   二.Spring注解开发 1.service ...

  2. spring 注解 注入属性 和 注解完成bean定义

    1. 使用 @Autowired 和 @Resource 注解来注入属性 2. 使用 @Component.@Repository.@Service.@Controller 注解,就将该类定义为一个B ...

  3. Java 进阶巩固:什么是注解以及运行时注解的使用

    这篇文章 2016年12月13日星期二 就写完了,当时想着等写完另外一篇关于自定义注解的一起发.结果没想到这一等就是半年多 - -. 有时候的确是这样啊,总想着等条件更好了再干,等准备完全了再开始,结 ...

  4. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

  5. Myeclipse插件快速生成ssh项目并配置注解 在action层注入service的超详细过程

    最近发现,我对于ssh的 自动注入配置 还是不熟悉,于是整理了一下 终于做了一个 简单的 注入配置出来. 以前都是在applicationContext.xml 里面这样配 <bean id=& ...

  6. 项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok

    @Data注解来源与Lombok,可以减少代码中大量的set get方法,大量减少冗余代码,但是今天部署项目时候,发现实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错. ...

  7. springMVC 返回json 忽略类中属性的注解

    该注解使用在 类名,接口头上 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 该注解使用在get方法头上 @JsonIgno ...

  8. SSH项目(struts+spring+hibernate)搭建_代码简化

    在上篇讲到SSH框架的搭建后,为了有利于随时能熟练的把一个SSH的项目快速的搭建起来,我又进一步对其了解学习,对代码进行了简化,大家相互讨论学习. 为什么要简化:  如果要做一个大项目,假设项目的ac ...

  9. SSH项目搭建(二)

    本章讲解SSH项目需要到哪些jar包,及各个jar包的作用 一.struts2 1.下载好struts2,struts2文件夹>>>>apps>>>>a ...

随机推荐

  1. RDIFramework.NET V2.9版本多语言的实现

    RDIFramework.NET V2.9版本多语言的实现 现在是国际化时代,软件也不能落后.一个公司里很可能会有老外,也可能有台湾的朋友,他们用软件的习惯都不一样,若同样一个软件同时能适应多种语言文 ...

  2. delphi关闭程序Close,application.Terminate与halt区别

    当Close是一个主窗体时,程序会退出.Close会发生FormClose事件,FormCloseQuery事件Halt会发生FormDestory事件,Application.Terminate以上 ...

  3. lnmp环境下载安装包

    一.下载php(官网):http://php.net/downloads.php 点击上图选择的php-7.0.10.tar.gz (sig) 进入如下页面: 需要在linux上面下载需要如下操作: ...

  4. 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

    背景 首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也 ...

  5. Qt之界面实现技巧

    一.主界面 1.窗口 最小化 最小化 关闭按钮 显示状态自定义 setWindowFlags(Qt::CustomireWindowHint); setWindowFlags(Qt::WindowCl ...

  6. iOS中UIWebView与其中网页的javascript的交互

    首发:个人博客,更新&纠错&回复 1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句 2. 但js调本地语言,则不是像android那样 ...

  7. UBI系统原理-中【转】

    转自:http://blog.chinaunix.net/uid-28236237-id-4217118.html UBI 文件头位置 EC头都放置在擦除块的开始偏移位置,占用64字节空间.之后防止V ...

  8. jQuery 选择器 (基础恶补之三)+Ajax

    jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...

  9. 规则引擎以及blaze 规则库的集成初探之三——Blaze规则引擎和SRL

    原文地址:http://jefferson.iteye.com/blog/68604 在上面介绍利用JSR94的api使用的章节中,我们使用的具体引擎的实现是一个商业产品,如果想了解Drools的使用 ...

  10. python字符串加颜色区别

    1.有时需要显目的区别不同内容,可以改变显目的内容颜色 print("\033[31;1m你好麽,\033[0m我很好..")print("\033[32;1m你好麽,\ ...