首先,在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. RH033读书笔记(7)-Lab 8 Introduction to String Processing

    Lab 8 Introduction to String Processing Sequence 1: Exercises in string processing 1. Other than the ...

  2. Uva 10131 Is Bigger Smarter? (LIS,打印路径)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131 题意: ...

  3. Spark SQL源代码分析之核心流程

    /** Spark SQL源代码分析系列文章*/ 自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几 ...

  4. C++输出数据到txt

    平时总遇到将数据写到txt中的情况,尤其是在调试程序看中间结果时,所以将代码保存下来,方便以后应用: ofstream outfile; string InitialFileName("In ...

  5. C# 字段、属性、成员变量

    引言: C#与java,C++中的这些基本概念略有不同. 由于easy混淆,所以这里总结下差别. 希望能对刚開始学习的人有帮助! 一.定义与作用 1.字段(field):是C#类级别定义的,和方法同一 ...

  6. 通过ccb(CocosBuilder)文件生成cocos2dx代码

    在C++下使用ccb.绑定调用,成员变量.让人头疼又easy犯错. 自己用pythong写了个小程序,通过ccb文件直接生成C++代码 python我用的不多.又是随性所做.代码质量就非常差.大家多多 ...

  7. div显示和隐藏

    它是实现比较简单.style.display控制层隐藏或显示属性. <html> <body> <script> function show(){ document ...

  8. Smart Framework

    Smart Framework:轻量级 Java Web 框架 发表于2年前(2013-09-01 08:39)   阅读(48569) | 评论(188) 544人收藏此文章, 我要收藏 赞83 阿 ...

  9. HDU1312 Red and Black 解读

    递归搜索方法标题,采用递归搜索方法,但是,如果没有迭代计算的真正的政党格. 我们的想法是: 1 每一个搜索为党格要改变电流方向格的值至 '*',或任何其他非'.'的值,代表方格了 2 递归的时候不回复 ...

  10. ASP.Net中上传文件的几种方法

    在做Web项目时,上传文件是经常会碰到的需求.ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作.但有时,你可能不希望使用ASP.Net中的服务器控件 ...