spring 自动化配置

1、准备工作

在自动化扫描时,能让类自动注册到Spring容器中去,那么可以给该类添加一个@Service,作为一个标记,和@Service注解功能类似的一共有四个:

@service: 在Service层上添加注解

@Repository:在Dao层添加注解

@Controller:在Controller层添加注解

@Component:在其他组件上添加注解

package prg.javaboy.ioc.service;

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class UserService {
    public List<String> getAllUser(){
        List<String> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            users.add("javaboy:" + i);
        }
        return users;
    }
}

2、Java代码配置自动扫描

@Configuration
@ComponentScan(basePackages = "org.javaboy.ioc.service")
public class JavaConfig {
}

然后,在项目启动中加载配置类,在配置类中,通过@CompontScan注解指定要扫描的包(如未指定。默认情况下扫描的是配置类所在的包下载的Bean以及配置类所在的包下的子包下的类),然后就可以获取UserService的实例了:

public class main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JavaConfig.class);
        UserService userService = ctx.getBean(UserService.class);
        System.out.println("userService.getAllUser() = " + userService.getAllUser());
    }
}

ps.注意问题:

1、Bean的名字叫什么?

默认情况下,Bean的名字是类名首字母小写。例如上面的UserService,他的实例名,默认就是userService。如果开发者想要自定义名字,就直接在@Service注解中添加即可。

2、有几种扫描方式?

上面的配置,我们是按照包的位置来扫描的。也就是说,Bean必须放在指定的扫描位置,否则,即使你有@Service注解,也扫描不到。

除了按照包的位置来扫描,还有另一种方式,就是根据注解来扫描。例如如下配置:

@Configuration
@ComponentScan(basePackages = "org.javaboy.ioc.service",useDefaultFilters = true,
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
public class JavaConfig {
}

这个配置表示扫描org.javaboy.javaconfig下所有Bean,但是除了Controller。

3、XML配置自动化扫描

这行配置表示扫描org.javaboy.ioc.javaconfig下所有的Bean当然也可以按照类来扫描
<context:component-scan base-package="org.javaboy.ioc.javaconfig"/>

XML配置完,在java加载XML配置:

public class XMLYest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        UserService userService = ctx.getBean(UserService.class);
        List<String> list = userService.getAllUser();
        System.out.println("list = " + list);
    }
}

也可以在XML配置中按照注解的类型进行扫描:

<context:component-scan base-package="org.javaboy.ioc.javaconfig" use-default-filters="true">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值