• 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.  

     假如类Aspring容器管理,在类B中引用A,假设想在B中的A是由spring容器创建的,有两种方法:

         a).B也由spring容器管理(即类B前有@compoment(b)标签),并注入A,BeanFactory.getBean("b") 得到B实例,就可以(推荐).

         b).B不由spring容器管理,在类B中用代码 (ABeanFactory.getBean("a")得到A实例,就可以.(不推荐,会产生两个beanFactory由于在类B中须要用BeanFactory,所以我们必须在Bnew一个)

    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); } }





    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Luogu P3731 [HAOI2017]新型城市化
    Luogu P3227 [HNOI2013]切糕 最小割
    Luogu P1654 OSU!
    CF235B Let's Play Osu! 期望dp
    Luogu P2057 [SHOI2007]善意的投票
    任意模数NTT学习笔记
    Burnside引理的感性证明
    JLOI2015 城池攻占
    BZOJ2957 楼房重建
    NOI2009 区间
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4640478.html
Copyright © 2020-2023  润新知