Spring注解驱动开发----->容器day02

1.原生的xml配置自动扫描包:

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <!-- 添加包扫描 只要标注了@Controller/@Service/@Repository/@Component,都会自动扫描加入组件中 -->
    <!-- use-default-filters="false"表示禁用掉默认的过滤规则 -->
    <context:component-scan base-package="com.atguigu"
        use-default-filters="false"></context:component-scan>

    <bean id="person" class="com.atguigu.bean.Person">
        <property name="name" value="张三" />
        <property name="age" value="18" />
    </bean>

</beans>     

2.添加分层架构

dao层:

package com.atguigu.dao;

import org.springframework.stereotype.Repository;

@Repository
public class BookDao {

}


service层:

package com.atguigu.service;

import org.springframework.stereotype.Service;

@Service
public class BookService {

}


controller层:

package com.atguigu.controller;

import org.springframework.stereotype.Controller;

@Controller
public class BookController {

}

3..使用注解在配置类中添加扫描:

package com.atguigu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

import com.atguigu.bean.Person;

/**
 * 配置类==原来的配置文件
 * @author Administrator
 *
 */
@Configuration    //告诉spring这是一个配置类
//@ComponentScan(value="com.atguigu",includeFilters={
//        @Filter(type=FilterType.ANNOTATION,classes={Controller.class,Service.class})
//},useDefaultFilters=false)    //添加扫描
@ComponentScans(
        value ={ 
                @ComponentScan(value="com.atguigu",includeFilters={
                        @Filter(type=FilterType.ANNOTATION,classes={Controller.class,Service.class})
                },useDefaultFilters=false)    
        }
        )
//@ComponentScan value指定要扫描的包
//excludeFilters = Filter[]指定按照什么规则排除哪些组件
//includeFilters = Filter[]指定扫描的时候只需要包含哪些组件
//useDefaultFilters=false表示禁用掉默认的过滤规则
public class MainConfig {

    @Bean("yikuan")
    public Person person(){
        return new Person("李四",20);
    }
}

4.测试类:

package com.yikuan.test;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.atguigu.bean.Person;
import com.atguigu.config.MainConfig;

public class TestAnnotation {
    ClassPathXmlApplicationContext cc;

    @Before
    public void init() {
        cc = new ClassPathXmlApplicationContext("beans.xml");
    }

    @Test
    public void test01(){
        Person bean = cc.getBean("person",Person.class);
        System.out.println(bean);
    }
    
    @Test
    public void test02(){
        AnnotationConfigApplicationContext aa = new AnnotationConfigApplicationContext(MainConfig.class);
        Person bean = aa.getBean(Person.class);
        System.out.println(bean);
        //查看id的值
        String[] beanNamesForType = aa.getBeanNamesForType(Person.class);
        for (String name : beanNamesForType) {
            System.out.println(name);
            //此时的默认id名字为【person】
            //使用@Bean("yikuan")就可以修改bean对象id的名字
            //注意!spring-context版本问题,低版本有些不可以在@Bean后面加()修改名字
        }
    }
    
    @SuppressWarnings("resource")
    @Test
    public void test03(){
        AnnotationConfigApplicationContext aa = new AnnotationConfigApplicationContext(MainConfig.class);
        String[] name = aa.getBeanDefinitionNames();
        for (String string : name) {
            System.out.println(string);
        }
    }

    @After
    public void destory() {
        cc.close();
    }
}    


结果:
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainConfig
bookController
bookService
yikuan
原文地址:https://www.cnblogs.com/yikuan-919/p/9718097.html