Spring第九阶段:Spring的注解功能

注解功能

1、注解配置Dao、Service、Controller组件

通过注解分别创建Dao、Service、Controller
Spring配置bean的常用注解有

@Controller	配置web层的组件	
@Service	配置Service组件
@Repository	配置Dao组件
@Component	配置JavaBean( 除Service , Dao , Controller组件之外的JavaBean )
@Scope						配置单例,或多例
@Scope("prototype") // 表示多例 , 默认不使用@Scope注解表示单例 

如果需要自定义id值. 只需要在注解中直接注入value属性值即可.
在这里插入图片描述
Spring第九阶段:Spring的注解功能_第1张图片

/**
 *  @Component 注解的作用相当于: 
*
* class 属性是当前Bean的全类名
* id 属性默认是当前类名首字母小写
*/
@Component public class Book { } /** * @Controller 注解的作用相当于:
*
* class 是当前类的全类名
* id 是类名首字母小写
*/
@Controller public class BookController { } /** * @Repository注解作用相当于:
* * class 属性是当前类的全类名
* id 默认是类名首字母小写
*/
@Repository public class BookDao { } /** * @Service 注解的作用相当于:
*
* class 属性是当前类的全类名
* id 属性是当前类名首字母小写
*/
@Service public class BookService { }

在applicationContext.xml配置文件中加入包扫描才可以使用注解:

<!--
    context:component-scan 表示组件扫描
        base-package 是你要搜索的包.( 也会扫描子包 )
-->
<context:component-scan base-package="com.atguigu"></context:component-scan>

测试

public class SpringTest {

    @Test
    public void test1() {

        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");

        System.out.println(applicationContext.getBean("book"));
        System.out.println(applicationContext.getBean("bookDao"));
        System.out.println(applicationContext.getBean("bookService"));
        System.out.println(applicationContext.getBean("bookController"));

    }

}

2、指定扫描包时的过滤内容

使用context:include-filter指定扫描包时要包含的类
使用context:exclude-filter指定扫描包时不包含的类
<context:include-filter />	设置包含的内容
<context:exclude-filter />	设置排除的内容

Spring第九阶段:Spring的注解功能_第2张图片
注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false,

applicationContext.xml 中配置的内容如下

<!-- use-default-filters="false" 设置取消默认包含规则 -->
	<context:component-scan base-package="com.atguigu" 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.atguigu.service.BookService类

3、使用注解@Autowired自动装配

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

@Service
public class BookService {
    /**
     * @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 
* 1 先按类型查找,找到一个就注入
* */
@Autowired private BookDao bookDao; @Override public String toString() { return "BookService{" + "bookDao=" + bookDao + '}'; } }

4、多个同类型的bean如何自动装配

如果资源类型的bean不止一个,默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配

@Service
public class BookService {
    /**
     * @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 
* 1 先按类型查找,找到一个就注入
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入
*/
@Autowired private BookDao bookDao; @Override public String toString() { return "BookService{" + "bookDao=" + bookDao + '}'; } }

5、使用@Qualifier装配指定id的bean对象

如果根据成员变量名作为id还是找不到bean,可以使用@Qualifier注解明确指定目标bean的id

@Service
public class BookService {
    /**
     * @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 
* 1 先按类型查找,找到一个就注入
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入
* 3 @Qualifier("xxx")注解可以指定一个id到Spring容器中查找并注入 (会忽略属性名)
*/
@Qualifier("bookDao") @Autowired private BookDao bookDaoExt; @Override public String toString() { return "BookService{" + "bookDao=" + bookDaoExt + '}'; } }

6、@Autowired注解的required属性作用

@Autowired注解的required属性指定某个属性允许不被设置

@Service
public class BookService {
    /**
     * @Autowired 注解的作用是在Spring容器中查找需要的Bean对象.然后赋值 
* 1 先按类型查找,找到一个就注入
* 2 如果按类型查找到多个,接着按属性名做为id继续查找并注入
* 3 @Qualifier("xxx")注解可以指定一个id到Spring容器中查找并注入 (会忽略属性名)
* 4 如果@Qualifier("xxx")注解没有按照指定id找到Bean,也可以设置required = false允许字段值为null. */
@Qualifier("bookDao1") @Autowired(required = false) private BookDao bookDaoExt; @Override public String toString() { return "BookService{" + "bookDao=" + bookDaoExt + '}'; } }

7、@Autowired和@Qualifier在方法上的使用

在方法的形参位置使用@Qualifier注解

/**
 * @Autowired 注解如果标识在方法上,则Bean对象创建好之后,就会马上调用,一般用于给JavaBean属性初始化赋值 
* 1 Spring框架会自动的按参数的类型到Spring容器中按类型查找Bean并传递赋值
* 2 如果按类型找到多个,再按参数名做id继续查找并赋值
* 3 使用@Qualifier("xxx")注解在参数上指定一个id到Spring容器中查找并注入 (会忽略参数名)
* 4 如果@Qualifier("xxx")注解没有按照指定id找到Bean,也可以设置required = false允许方法不调用 */
@Autowired(required = false) public void abc(@Qualifier("bookDao1") BookDao bookDaoExt1){ System.out.println("abc() ===>>> " + bookDaoExt1); this.bookDaoExt = bookDaoExt1; }

8、泛型注入

测试泛型依赖注入
Spring第九阶段:Spring的注解功能_第3张图片

你可能感兴趣的:(Java,spring,java,mybatis)