首先,在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正在使用)的更多相关文章

  1. @Component, @Repository, @Service,@Controller的区别

    @Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...

  2. [转]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 ...

  3. What's the difference between @Component, @Repository & @Service annotations in Spring?

    @Component is equivalent to <bean> @Service, @Controller , @Repository = {@Component + some mo ...

  4. 【转载】@Component, @Repository, @Service的区别

    @Component, @Repository, @Service的区别 官网引用 引用spring的官方文档中的一段描述: 在Spring2.0之前的版本中,@Repository注解可以标记在任何 ...

  5. Spring注解的使用和区别:@Component、@Service、@Repository、@Controller

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  6. @Component @Repository @Service @Controller

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  7. SpringAnnotation注解之@Component,@Repository,@Service,@Controller

    @Component:组件,表示此写上了此注解的bean,作为一个组件存在于容器中.这样的话别的地方就可以使用@Resource这个注解来把这个组件作为一个资源来使用了.初始化bean的名字为类名首字 ...

  8. Spring security (一)架构框架-Component、Service、Filter分析

    “致"高级"工程师(BUG工程师) 一颗折腾的心

  9. @Component, @Repository, @Service的区别

    注解 含义 @Component 最普通的组件,可以被注入到spring容器进行管理 @Repository 作用于持久层 @Service 作用于业务逻辑层 @Controller 作用于表现层(s ...

随机推荐

  1. Linux(Centos)中tcpdump参数用法详解(转)

    在linux下进行编程开发的人尤其是网络编程的人会经常需要分析数据包,那么一定会用到tcpdump,下面就是关于tcpdump的使用方法说明(1). tcpdump的选项 -a       将网络地址 ...

  2. 我只是不甘心-------Day51

    回放假回家一天,完全断网,天气也很给力配合.水蓝色的天空.白云,抬眼,我没有看到刺目的光芒,但仍眼眼睛刺痛.已经缩小眼,我试图打开眼睛,就像眼泪都流出来了,它不会擦到沙,这是很多其他的没地方. 哥哥去 ...

  3. HTML基本介绍

    html 即 超文本标记语言 ,即标准通用标记语言下的一个应用. "超文本"就是指页面内能够包括图片.链接.甚至音乐.程序等非文字元素.超文本标记语言的结构包括"头&qu ...

  4. 【Web探索之旅】第二部分第一课:客户端语言

    内容简介 1.第二部分第一课:客户端语言 2.第二部分第二课预告:服务器语言 第二部分:Web编程语言和工具 大家好.上一个部分我们学习了Web的一些基本概念: 什么是Web? Internet和We ...

  5. ASP.NET自定义控件组件开发 第一章 第三篇

    原文:ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待 ...

  6. 交互式命令 expect

    shell尽管很强大.但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任.手动输入的时间需要password. 这样的情况下可以使用expect支持. 下面举个 ...

  7. 复制(6)——分发者(Distributor)

    如简介中提到,分发者(Distributor)是SQLServer 复制过程的核心组件.因为它是控制和执行实际的数据移动的过程,并且存放了发布(Publications)和订阅(Subscriptio ...

  8. AndroidUI的组成部分RoomButton

    <!-- 知识点汇总: 1.Button与ImageButton的差别在于,Button生成的button上显示文字 而ImageButton上则显示图片.须要指出的是:为ImageButton ...

  9. 使用live delegate on解决js后装html故障问题

    今天写一个前端的东西.每学到更多的知识.几下就能写几行代码.代码行数十个.代码几个文件量--这是真的.一直以来研究的前端遇到的问题仍然在实践百度谷歌问答. 我今天遇到这样的问题:已经写js代码,正确a ...

  10. ubuntu 下安装 matplotlib

    直接使用sudo easy_install matplotlib 报错 ================================================================ ...