• Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)


    Spring4.0的新特性我们在上一章已经介绍过了。

    包含它对jdk8的支持,Groovy Bean Definition DSL的支持。核心容器功能的改进,Web开发改进。測试框架改进等等。这张我们主要介绍spring4.0的自己主动扫描功能,以及对bean的过滤等特性进行学习。

    好吧。废话少说,我们来看看代码吧。

    package com.herman.ss.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.herman.ss.action.TestAction;
    import com.herman.ss.filter.Filter1;
    import com.herman.ss.filter.Filter2;
    import com.herman.ss.filter.test.Filter3;
    import com.herman.ss.pojo.House;
    import com.herman.ss.pojo.Person;
    /**
     * @see spring4.0.0最新稳定版新特性,自己主动扫描bean,自己主动注入bean
     * @author Herman.Xiong
     * @date 2014年7月18日14:49:42
     */
    public class Test1 {
    	/**
    	 * @see spring4.0自己主动扫描bean,自己主动注入bean
    	 */
    	public static void test0(){
    		//1.载入配置文件
    		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext1.xml");
    		//2.获取bean实例
    		Person person=(Person)ctx.getBean("person");
    		House house=(House)ctx.getBean("house");
    		//3.打印bean属性
    		System.out.println(person);
    		System.out.println(house);
    	}
    	
    	/**
    	 * @see spring4.0简单业务逻辑的注解
    	 */
    	public static void test1(){
    		//1.载入配置文件
    		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext1.xml");
    		//2.获取bean实例 获取bean
    		TestAction testAction=(TestAction)ctx.getBean("testAction");
    		//3.打印bean属性
    		System.out.println(testAction);
    		//4.调用bean对象的方法
    		testAction.testAction();
    		
    		//@Service 用于标注业务层组件;
    		//@Repository 用于标注数据訪问层组件。
    		//@Controller 用于标注控制层组件(如:Struts中的action)
    		//@Component 表示泛型组件,当组件不好归类的时候,我们能够使用这个组件进行注解。
    	}
    	
    	/**
    	 * @see spring4.0简单注解的排除过滤器配置
    	 */
    	public static void test2(){
    		//1.载入配置文件
    		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext1.xml");
    		//2.获取bean实例,仅仅能依据bean的id获取bean
    		Filter1 filter1=(Filter1)ctx.getBean("filter1");
    		Filter2 filter2=(Filter2)ctx.getBean("filter2");
    		//3.打印bean属性
    		System.out.println(filter1);
    		System.out.println(filter2);
    		/**
    		 * 执行会报错:Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'filter2' is defined
    		 * 原因是:filter2被我们排除在外了。不会自己主动注入
    		 * 因此会抛异常
    		 */
    	}
    	/**
    	 * @see spring4.0简单注解的包括过滤器配置
    	 */
    	public static void test3(){
    		//1.载入配置文件
    		ApplicationContext ctx=new ClassPathXmlApplicationContext("com/herman/ss/config/applicationContext1.xml");
    		//2.获取bean实例	
    		Filter3 filter3=(Filter3)ctx.getBean("filter3");
    		Filter2 filter2=(Filter2)ctx.getBean("filter2");
    		Filter1 filter1=(Filter1)ctx.getBean("filter1");
    		//3.打印bean属性
    		System.out.println(filter3);
    		System.out.println(filter2);
    		System.out.println(filter1);
    		/**
    		 * 执行会报错:Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'filter2' is defined
    		 * 原因:filter2 被我们排除在外了
    		 * 因此:我们回去filter2  这个bean对象的时候就会报错。

    * filter1 为什么不报错呢。由于我们设置了 com.herman.ss.filter包以下的use-default-filters="true" 自己主动导入 * 因此:filter1 不会报错 */ } public static void main(String[] args) { /** * 注解须要的jar包列举: * spring-aop-4.0.6.RELEASE.jar * spring-beans-4.0.6.RELEASE.jar * spring-context-4.0.6.RELEASE.jar * spring-core-4.0.6.RELEASE.jar * spring-expression-4.0.6.RELEASE.jar * commons-lang-2.4.jar */ //test0(); //test1(); //test2(); test3(); } }

    配置文件源代码:

    <?

    xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 打开Spring组件自己主动扫面。并配置要扫描的基本包 --> <context:component-scan base-package="com.herman.ss.pojo"></context:component-scan> <context:component-scan base-package="com.herman.ss.action"></context:component-scan> <context:component-scan base-package="com.herman.ss.biz"></context:component-scan> <context:component-scan base-package="com.herman.ss.dao"></context:component-scan> <context:component-scan base-package="com.herman.ss.filter" use-default-filters="false"> <!-- 取消自己主动注入,配置仅仅注入com.herman.ss.filter.test以下的全部类 --> <context:include-filter type="regex" expression="com.herman.ss.filter.test.*"/> </context:component-scan> <context:component-scan base-package="com.herman.ss.filter" use-default-filters="true"> <!-- 自己主动注入,可是Filter2除外 --> <context:exclude-filter type="regex" expression="com.herman.ss.filter.Filter2" /> </context:component-scan> <!-- 注:<context:component-scan>节点用于通知Spring容器扫描组件,base-package属性用于指定将要被扫描的组件所在的包名 这里将自己主动的配置扫描com.herman.ss.pojo以下的bean --> </beans>

    实体类源代码:
    package com.herman.ss.pojo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    /**
     * @see 实体类使用Component注解
     * @author Herman.Xiong
     * @date 2014年7月24日17:11:59
     */
    @Component("person")
    public class Person {
    	private String name;
    	private int age;
    	//这里设置自己主动注入
    	@Autowired
    	private House house;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public House getHouse() {
    		return house;
    	}
    	public void setHouse(House house) {
    		this.house = house;
    	}
    	public Person() {
    		super();
    	}
    	public Person(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public Person(String name, int age, House house) {
    		super();
    		this.name = name;
    		this.age = age;
    		this.house = house;
    	}
    	@Override
    	public String toString() {
    		return "Person [age=" + age + ", house=" + house + ", name=" + name
    				+ "]";
    	}
    	
    }
    
    House.java源代码:
    package com.herman.ss.pojo;
    
    import org.springframework.stereotype.Component;
    
    @Component("house")
    public class House {
    	private String name;
    	private String address;
    	private float price;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	public float getPrice() {
    		return price;
    	}
    	public void setPrice(float price) {
    		this.price = price;
    	}
    	public House() {
    		super();
    	}
    	public House(String name, String address, float price) {
    		super();
    		this.name = name;
    		this.address = address;
    		this.price = price;
    	}
    	public String toString() {
    		return "House [address=" + address + ", name=" + name + ", price="
    				+ price + "]";
    	}
    	
    }
    
    package com.herman.ss.action;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    
    import com.herman.ss.biz.TestBiz;
    
    /**
     * @see 模拟action
     * @author Herman.Xiong
     * @date 2014年7月24日17:17:16
     * @since jdk 1.6,tomcat 6.0
     */
    @Controller("testAction")
    public class TestAction {
    	
    	//使用自己主动加载
    	@Autowired
    	private TestBiz testBiz;
    	//必须提供set方法
    	public void setTestBiz(TestBiz testBiz) {
    		this.testBiz = testBiz;
    	}
    
    	public TestAction(){
    		System.out.println("模拟的action类");
    	}
    	
    	public void testAction(){
    		testBiz.testBiz();
    	}
    }
    
    package com.herman.ss.biz;
    
    /**
     * @see 模拟biz层进行注解
     * @author Herman.Xiong
     * @date 2014年7月24日17:20:25
     */
    public interface TestBiz {
    	void testBiz();
    }
    
    package com.herman.ss.biz.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.herman.ss.biz.TestBiz;
    import com.herman.ss.dao.TestDao;
    @Service("testBiz")
    public class TestBizImpl implements TestBiz{
    	@Autowired
    	private TestDao testDao;
    	
    	//必须提供set方法
    	public void setTestDao(TestDao testDao) {
    		this.testDao = testDao;
    	}
    
    	public void testBiz() {
    		System.out.println("模拟biz层");
    		testDao.testDao();
    	}
    
    }
    
    package com.herman.ss.dao;
    
    /**
     * @see 模拟dao层进行注解
     * @author Herman.Xiong
     * @date 2014年7月24日17:20:25
     */
    public interface TestDao {
    	void testDao();
    }
    
    package com.herman.ss.dao.impl;
    
    import org.springframework.stereotype.Repository;
    
    import com.herman.ss.dao.TestDao;
    @Repository("testDao")
    public class TestDaoImpl implements TestDao{
    
    	public void testDao() {
    		System.out.println("模拟dao层");
    	}
    
    }
    
    package com.herman.ss.filter;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    //Scope注解设置作用域
    @Controller("filter1")@Scope("prototype")
    public class Filter1 {
    	public Filter1(){
    		System.out.println("我是Filter1 ...");
    		System.out.println("Scope注解设置作用域");
    	}
    }
    
    package com.herman.ss.filter.test;
    
    import org.springframework.stereotype.Controller;
    
    @Controller("filter3")
    public class Filter3 {
    	public Filter3(){
    		System.out.println("我是filter3");
    	}
    }
    
    package com.herman.ss.filter;
    
    import org.springframework.stereotype.Controller;
    
    @Controller("filter2")
    public class Filter2 {
    	public Filter2(){
    		System.out.println("我是Filter2 ...");
    	}
    }
    

    欢迎大家关注我的个人博客!!!!

    如有不懂,疑问或者欠妥的地方,请加QQ群:135430763   进行反馈。共同学习!

  • 相关阅读:
    什么叫精通C++
    编程好书推荐
    Reading Notes ofC Traps and Pitfalls
    继承的小问题
    关于strcpy函数
    #pragma once 与 #ifndef 的区别解析
    模板类的友元重载函数
    NET开发人员必知的八个网站
    获取MDI窗体的实例
    .Net下收发邮件第三方公共库
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6873687.html
Copyright © 2020-2023  润新知