Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)
首先,在xml其中新增部分标有下划线的文件,容器初始化的时候需要扫描包
注意:
a. 包款扫描(下划线部分)一定要加,默认是不扫描整个包。与每一包之间’,’开。如过具有同样的父包,那么我们能够用父包来取代。例如以下划线部分,我们能够用com.bjsxt来取代。
<? 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config /><!-- 自己主动装配一定要 加上此片段-->
<context:component-scan base-package="com.bjsxt.dao.impl,com.bjsxt.service,com.bjsxt.model"></context:component-scan>
</beans>
b. 在2.5版本号中(@Component、@Repository、@Service和@Controller)四个标签代表同样的含义,以后的版本号中可能会有差别。
c. 在标注组件等资源时候,尽量加上名称比如@Component("stuDaoImpl")。
默认的名称是 类名首字母小写。
<pre name="code" class="java">package com.bjsxt.dao.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.bjsxt.dao.*;
import com.bjsxt.model.Student;
@Component("stuDaoImpl")
public class StudentDaoImpl implements StudentDao{
@Override
public void StudentSave(Student s) {
System.out.println("学生被保存!"); }
}
d. 用法 在set方法或者属性名前增加 @resource(name="stuDaoImpl"),推荐增加名称,默认是依照类型进行查找。比如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; import com.bjsxt.dao.*;
import com.bjsxt.dao.impl.*;
import com.bjsxt.model.*;
@Component("studentService")//声明资源
public class StudentService {
private StudentDao studentDao;
public StudentDao getStudentDao() {
return studentDao;
}
@Resource(name="stuDaoImpl")//注入
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
public void add(Student s)
{
this.studentDao.StudentSave(s);
}
e.測试方式依旧和之前的注入方式一样,注意这里的
Studentstudent=(Student)ctx.getBean("student");是我们用标签在student类中声明的@Component("student")。
Spring容器会能通过ctx(相当于beanFactory)找到。
package com.bjsxt.service; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bjsxt.model.Student; public class StudentServiceTest { @Test
public void test() {
System.out.println("程序执行之前....");
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
System.out.println("程序执行開始....");
StudentService sService=(StudentService)ctx.getBean("studentService"); Student student=(Student)ctx.getBean("student");
Student student2=(Student)ctx.getBean("student");
System.out.println(student2==student);
sService.add(student);
}
}
f. 在jsp页面须要处理业务,有java代码须要spring注入service。
须要如今想要获取的类前加标签
@Component("docrelationService")首先jsp页面导入
<%@page import="org.springframework.context.ApplicationContext"%>
<%@pageimport="org.springframework.web.context.support.WebApplicationContextUtils"%>
获取spring注入
<%
ApplicationContext context =WebApplicationContextUtils
.getWebApplicationContext(application);
DocrelationServicedocrelationService = (DocrelationService) context
.getBean("docrelationService");
%>
g.
假如类A由spring容器管理,在类B中引用A,假设想在B中的A是由spring容器创建的,有两种方法:
a).类B也由spring容器管理(即类B前有@compoment(“b”)标签),并注入A,用BeanFactory.getBean("b")
得到B实例,就可以(推荐).
b).类B不由spring容器管理,在类B中用代码 (A)BeanFactory.getBean("a")得到A实例,就可以.(不推荐,会产生两个beanFactory由于在类B中须要用BeanFactory,所以我们必须在B中new一个)
c)类B创建实例时候假设採用a)方法,决不能採用B b=new B();的方式,否则会报nullpoint异常。
d)ClassPathXmlApplicationContext建立在beanFactory基础之上,非常少有人直接使用。
測试代码:
package com.bjsxt.service; import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bjsxt.model.Student; public class StudentServiceTest { @Test
public void test() {
System.out.println("程序执行之前....");
//BeanFactory ctx=new ClassPathXmlApplicationContext("beans.xml");
//ClassPathXmlApplicationContext建立在beanFactory基础之上,非常少有人直接使用。 ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");//直接获取spring容器
System.out.println("程序执行開始....");
StudentService sService=(StudentService)ctx.getBean("studentService");//StudentService相当于类B
//StudentService sService=new StudentService();
Student student=(Student)ctx.getBean("student");
Student student2=(Student)ctx.getBean("student");
System.out.println(student2==student);
sService.add(student);
} }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Spring学习使用标签来标记资源(@Component、@Repository、 @Service和@Controller)和用法(包括如何jsp正在使用)的更多相关文章
- @Component, @Repository, @Service,@Controller的区别
@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...
- [转]what’s the difference between @Component ,@Repository & @Service annotations in Spring
原文地址:https://www.cnblogs.com/softidea/p/6070314.html @Component is equivalent to <bean> @Servi ...
- What's the difference between @Component, @Repository & @Service annotations in Spring?
@Component is equivalent to <bean> @Service, @Controller , @Repository = {@Component + some mo ...
- 【转载】@Component, @Repository, @Service的区别
@Component, @Repository, @Service的区别 官网引用 引用spring的官方文档中的一段描述: 在Spring2.0之前的版本中,@Repository注解可以标记在任何 ...
- Spring注解的使用和区别:@Component、@Service、@Repository、@Controller
Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...
- @Component @Repository @Service @Controller
Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...
- SpringAnnotation注解之@Component,@Repository,@Service,@Controller
@Component:组件,表示此写上了此注解的bean,作为一个组件存在于容器中.这样的话别的地方就可以使用@Resource这个注解来把这个组件作为一个资源来使用了.初始化bean的名字为类名首字 ...
- Spring security (一)架构框架-Component、Service、Filter分析
“致"高级"工程师(BUG工程师) 一颗折腾的心
- @Component, @Repository, @Service的区别
注解 含义 @Component 最普通的组件,可以被注入到spring容器进行管理 @Repository 作用于持久层 @Service 作用于业务逻辑层 @Controller 作用于表现层(s ...
随机推荐
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
- HTML的标签使用
<p>段落标签</p>:段落标签 <hx>标题标签</hx>:标题标签,x代表1-6 <em>斜体</em>:显示的字体是斜的 ...
- Xaml于string(弦)定义常量和处理空间
xml version="1.0" encoding="UTF-8"? > (1)基本使用方法 xaml中能够实例化各种对象,比方在ResourceDic ...
- 用bat 删除当前文件夹下的某类文件
@echo on for /r %%f in (*.pdb,*.xml) do del %%f 保存为bat文件执行!
- Android 4.4环境搭建——Android SDK下载与安装
学习开发Android应用程序,须要下载安装Android SDK.在Android的官方站点的二级域名http://developer.android.com/index.html中.能够下载到完整 ...
- 什么场景Hbase
Hbase不太复杂,但适合于存储大量的数据资料.因为是商城系统:用户.商品.订单,店,卖家,这些数据是不适合复杂的关系Hbase. 有一个非常大的数据量订购,并经常来计算.只考虑存款订单Hbase. ...
- hadoop2.0的datanode数据存储文件夹策略的多个副本
在hadoop2.0在,datanode数据存储盘选择策略有两种方式复制: 首先是要遵循hadoop1.0磁盘文件夹投票,实现类:RoundRobinVolumeChoosingPolicy.java ...
- Duanxx的STM32学习:STM32F103中等容量的功能和外设
版权声明:本文博客原创文章,博客,未经同意,不得转载.
- Java开发中的23种设计模式具体解释
public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = fa ...
- 华夏互联与逐浪CMS旗下三款软件获著作权登记
北京时间2014年7月24日消息: 上海逐一软件科技公司长下三款软件通过中国知识产权局登记,当中包含全新的CMS2 x2.0主产品.移动门户管理系统.云台管理系统. 除主产品CMS2 x2.0( ...