zoukankan      html  css  js  c++  java
  • Spring框架:第六章:注解功能

    8.1、注解配置Dao、Service、Controller组件
    实验32:通过注解分别创建Dao、Service、Controller★
    Spring配置bean的常用注解有
    @Controller 配置web层的组件
    @Service 配置Service层的组件
    @Repository 配置Dao层的组件
    @Component 除了web层、service层、dao层之外的组件。
    @Scope 配置作用域

    bean对象

    /**
     *  @Component 等价于<br/>
     *  <bean id="book" class="com.pojo.Book" />
     */
    @Component
    public class Book {}
    
    /**
     *  @Repository 等价于<br/>
     *  <bean id="bookDao" class="com.dao.BookDao" />
     */
    @Repository
    public class BookDao {}
    
    /**
     *  @Service 等价于<br/>
     *  <bean id="bookService" class="com.service.BookService" />
     */
    @Service
    public class BookService {}
    
    /**
     *  @Controller 等价于<br/>
     *  <bean id="bookServlet" class="com.controller.BookServlet" />
     */
    @Controller
    public class BookServlet {}
    

    8.2、指定扫描包时的过滤内容
    实验33:使用context:include-filter指定扫描包时要包含的类
    实验34:使用context:exclude-filter指定扫描包时不包含的类
    <context:include-filter /> 设置包含的内容
    注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false,
    <context:exclude-filter />设置排除的内容

    annotation com.XxxAnnotation
    过滤所有标注了XxxAnnotation的类。这个规则根据目标组件是否标注了指定类型的注解进行过滤
    assignable com.BaseXxx
    过滤所有BaseXxx类的子类。这个规则根据目标组件是否是指定类型的子类的方式进行过滤。

    applicationContext.xml 中配置的内容如下

    <!-- use-default-filters="false" 设置取消默认包含规则 -->
    <context:component-scan base-package="com" use-default-filters="false">
    	<!-- context:include-filter 设置包含的内容 -->
    	<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	<!-- context:exclude-filter 设置排除的内容 -->
    	<context:exclude-filter type="assignable" expression="com.atguigu.service.BookService"/>
    </context:component-scan>
    

    以上配置会包含所有@Service注解的类。排除com.service.BookService类

    包扫描的排除示例:

    <!-- 
    	context:component-scan 包扫描
    		base-package 设置你要扫描的包,以子包
    		base-package="com" 表示Spring会扫描com包,以及它所有子包都会扫描
     -->
    <context:component-scan base-package="com">
    	<!-- 
    		context:exclude-filter 排除某些类
    			type="annotation"表示按注解进行排除
    			expression 按哪些注解
    	 -->
    	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	<!-- 表示按类进行过滤,排除 -->
    	<context:exclude-filter type="assignable" expression="com.dao.BookDao"/>
    </context:component-scan>
    

    包扫描的包含示例:

    <!-- 
    	context:component-scan 包扫描
    		base-package 设置你要扫描的包,以子包
    		base-package="com" 表示Spring会扫描com包,以及它所有子包都会扫描
    		
    	use-default-filters="false"禁用默认的包扫描包含规则
        包扫描自定义包含规则一定要结合 use-default-filters="false" 一起使用
     -->
    <context:component-scan base-package="com" use-default-filters="false">		
    	<!-- 
    		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    		按照注解的形式配置包含扫描规则
    	 -->
    	<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	<context:include-filter type="assignable" expression="com.atguigu.dao.BookDao"/>
    </context:component-scan>
    

    8.3、使用注解@Autowired自动装配
    实验35:使用@Autowired注解实现根据类型实现自动装配★

    @Autowired 注解 会自动的根据标注的对象类型在Spring容器中查找相对应的类。如果找到,就自动装配。
    使用@Autowired注解,不需要get/set方法

    public class BookService {
    	/**
    	 * @Autowired 配置自动注入
    	 * 	1、先按类型进行查找然后注入。
    	 */
    	@Autowired
    	private BookDao bookDao;
    
    	@Override
    	public String toString() {
    		return "BookService [bookDao=" + bookDao + "]";
    	}
    
    }
    

    8.4、多个同类型的bean如何自动装配
    实验36:如果资源类型的bean不止一个,默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配★

    /**
     *  @Repository 等价于<br/>
     *  <bean id="bookDao" class="com.dao.BookDao" scope="singleton"/>
     */
    @Repository
    public class BookDao {}
    
    /**
     *  @Repository 等价于<br/>
     *  <bean id="bookDao" class="com.dao.BookDao" scope="singleton"/>
     */
    @Repository
    public class BookDaoExt extends BookDao{}
    
    
    /**
     * @Service 等价于<br/>
     * <bean id="bookService" class="com.service.BookService" />
     */
    @Service("bookService")
    // @Scope("singleton") // 表示单例===不写也一样
    @Scope("prototype") // 表示多例
    public class BookService {
    	/**
    	 * @Autowired 配置自动注入
    	 * 	1、先按类型进行查找然后注入。<br/>
    	 *  2、如果按类型查找找到多个,接着做属性名做为id接着查找注入。
    	 */
    	@Autowired
    	private BookDao bookDao;
    
    	@Override
    	public String toString() {
    		return "BookService [bookDao=" + bookDao + "]";
    	}
    
    }
    

    8.5、使用@Qualifier装配指定id的bean对象
    实验37:如果根据成员变量名作为id还是找不到bean,可以使用@Qualifier注解明确指定目标bean的id★

    @Service("bookService") // <bean id="bs" class="com.service.BookService" />
    // @Scope("singleton") // 表示单例===不写也一样
    @Scope("prototype") // 表示多例
    public class BookService {
    	/**
    	 * @Autowired 配置自动注入
    	 * 	1、先按类型进行查找然后注入。<br/>
    	 *  2、如果按类型查找找到多个,接着做属性名做为id接着查找注入。
    	 *  @Qualifier("bookDao") 可以设定按照指定的id来进行查找并注入
    	 */
    	@Qualifier("bookDaoExt")
    	@Autowired
    	private BookDao bookDao2;
    
    	@Override
    	public String toString() {
    		return "BookService [bookDao=" + bookDao2 + "]";
    	}
    
    }
    

    8.6、@Autowired注解的required属性作用
    实验39:@Autowired注解的required属性指定某个属性允许不被设置

    /**
     * @Autowired 配置自动注入
     * 	1、先按类型进行查找然后注入。<br/>
     *  2、如果按类型查找找到多个,接着做属性名做为id接着查找注入。
     *  @Qualifier("bookDao") 可以设定按照指定的id来进行查找并注入
     *  @Autowired(required=true) 表示必须找到一个相应的bean对象注入值。如果找不到,就报错。
     *  	如果required=false表示找不到bean对象注入,就值为null
     */
    @Qualifier("bookDaoExt2")
    @Autowired(required=false)
    private BookDao bookDao2;
    

    8.7、@Autowired和@Qualifier在方法上的使用。
    实验38:在方法的形参位置使用@Qualifier注解

    /**
     * 加入@Autowired的方法在bean对象创建出来之后,就会自动的调用<br/>
     * 加了@Autowired的方法中的参数,会自动的到spring IOC容器中去按类型查找并注入<br/>
     * 如果按类型查找,找到多个。就把参数名做为id接着查找并注入。
     */
    @Autowired
    public void abc(@Qualifier("bookDao")BookDao bookDaoExt2) {
    	System.out.println("这是加了@Autowired的方法...bookDao ==>> " + bookDaoExt2);
    }
    

    8.8、泛型注入(了解内容)
    实验40:测试泛型依赖注入★
    在这里插入图片描述
    9、Spring的专有测试(了解内容)
    @ContextConfiguration
    @RunWith

    /**
     * 怎么样使用Spring整合Junit的测试(Spring把容器加入到了测试的上下文)
     * 
     */
    // 告诉测试,Spring 容器的配置文件在哪
    @ContextConfiguration(locations="classpath:applicationContext.xml")
    @RunWith(SpringJUnit4ClassRunner.class)// 表示使用整合了Spring IOC容器的测试类进行测试
    public class SpringTest2 {
    
    	@Autowired
    	BookService bookService;
    	
    	@Autowired
    	UserService userService;
    	
    	@Test
    	public void test1() throws Exception {
    		bookService.saveEntity(new Book());
    		System.out.println("=========================");
    		userService.saveEntity(new User());
    	}
    	
    }
    
  • 相关阅读:
    Markdown编辑器:Typora
    Makefile的编写
    【转】Java基础——成员变量、局部变量和静态变量的区别
    【转】jsp 和 servlet的联系和区别
    【转】keySet和entrySet的区别
    10月25日下午PHP静态、抽象、接口
    10月25日上午PHP继承多态
    10月24日下午PHP封装
    10月24日上午PHP面向对象
    MYSQL存储过程、游标、触发器
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812080.html
Copyright © 2011-2022 走看看