Spring注解<context:component-scan base-package />使用

    小王:想要把一个bean交给Spring去管理,你想怎么做!

    小李:简单啊,在Spring的配置文件里面配置<bean id="" class=""></bean>不就行了。

    小王:不行啊,我们的项目太恶心了,用了一万个bean,写配置文件快累死了,密密麻麻的看不清楚

    小李:额!这个也太奇葩了,怎么办,翻翻书吧,有没有好方法。

   

     这是什么?自动装配?我擦,这么神奇?下面我们开启神奇的Spring自动装配之旅。

 

     Spring自动装配,目的就是解放Spring的配置文件,我们来看看解放以后的配置文件

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           ">
           
        <context:component-scan base-package="com"></context:component-scan>
        
</beans>

   

    小李:我擦,我得配置一万个bean呢,怎么现在只有一行了,靠谱吗!

     小王:试试不就知道了。

 

     简单的模拟数据库的bean

package com.dao;

import org.springframework.stereotype.Repository;

@Repository
public class OracleDao {
	//模拟数据的插入操作,但是这里只打印一句话
	public void insert() {
		System.out.println("哈哈,我往数据库插入了一条数据");
		
	}
}

   

    测试类:

    

package test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.service.PersonService;

public class TestPersonService {


	@Test
        public void test() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
		OracleDao oracleDao = (OracleDao)applicationContext.getBean("oracleDao");
		
		System.out.println(oracleDao);
		
	}

}

   

    打印结果是:com.dao.OracleDao@19ec4ed

    不是空指针吗,我擦Spring真的生效了!!!!

 

    但是@Repository是个什么东西。有问题吗,问360(犹豫为什么不是百度)硬广,还没有广告费

 

    360说:Spring为了能够实现bean的自动扫描,提供几个注解@Component、@Controller、@Repository、@Service你只要把这几个注解任选一个放到你想让Spring管理的类的上面,Spring就会自动把这个类纳入到自己的管辖范围,就像例子一样。

 

    等等,任选一个,为什么!

    其实Spring也想通过注解给各个bean分层的,比如@Controller就是对应mvc的表现层,@Service对应的就是服务层,@Repository对应的持久层,@Component就是所有组件的统称,这样方便以后程序分层。

 

    等等,这是注解吧,注解可是要开启对应的解析器的哦,比如依赖注入的时候使用注解就必须开启

<context:annotation-config/>,这个不用吗?

 

    是不,不用,在声明<context:component-scan base-package="com"></context:component-scan>自动扫描的时候Spring已经自动帮你开启了注解的解析器,啊,神奇的Spring啊。

 

    现在,你的配置文件清爽多了吧,不过问题又来了,菜鸟看不懂了怎么办?

 

    o(︶︿︶)o 唉把这个博客给他看看吧。

 

 

小贴士:

  • 自动装配的时候Spring默认给你的bean的取了名字,就是类名的第一个字母小写
  • 如果你想把这个bean换成自己的名字(好吧,受不了你了)只需要在@Component等这几个注解后面价格小括号,像这样@Component(“ILOVEYOU”),下次你去Spring里面找ILOVEYOU的时候就能找到你这个bean了
  • 默认Spring管理你的bean的作用域是单例,就是Spring容器启动的时候就把你的bean初始化一个放到他自己的仓库里(其实是一个map),以后你每次找他要他都从map里拿一个给你,想改怎么办,每次你给我一个新的,好吧,这样@Scope("prototype")每次给你一个新的
  • 我想给我的bean加初始化方法和销毁方法行吗?   好的,@PostConstruct,放到初始化方法,@PreDestroy放到销毁方法,这样初始化完你的bean就会调用你的方法了

    我靠,这么强大,服了没!

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自wangchen2009hao.iteye.com/blog/2026802