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

小王:想要把一个bean交给Spring去管理,你想怎么做!
小李:简单啊,在Spring的配置文件里面配置不就行了。
小王:不行啊,我们的项目太恶心了,用了一万个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呢,怎么现在只有一行了,靠谱吗!

小王:试试不就知道了。


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就会调用你的方法了
我靠,这么强大,服了没!

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值