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