Java学习--spring框架--入门通过注解配置bean(1)

classpath扫描组件

  • 组件扫描:spring能够从classpath下自动扫描,检测和实例化具有特定注解的组件。
  • 特定组将
  1. @Component:基本注解,标识了一个受spring管理的组件。
  2. @Respository:标识持久层组件。
  3. @Service:标识服务层(业务层)组件。
  4. @Controller:标识表现层组件
  • 对于扫描到的组件,spring有默认的命名策略:使用非限定类名,第一次字母小写。也可以在注解中通过value属性标识组件的名称。
  • 当在组件类上使用了特定的注解后,还需要在spring的配置文件中声明<context:component-scan >
  1. base-package属性:指定一个需要扫描的其类包,spring容器将会扫描这个其类包以及子包中的所有类。
  2. 当需要扫描多个包时候,可以使用逗号进行分割。
  3. 如果只希望扫描特定的类而非其类包下的所有类,可以使用resource-pattern属性过滤特定的类
  4. context:include-filter 子结点表示要包含的目标类
  5. context:exclude-filter 子结点表示要排除在外的目标类
  6. context:component-scan可以拥有若干个context:include-filter与context:exclude-filter子结点。

配置context:include-filter与context:exclude-filter

首先建立一个包annotation里面包含有repository、controller、service三个包
在这里插入图片描述
写Java中的类
controller中的UserController.java

@Controller
public class UserController {
    public void execute(){
        System.out.println("UserController execute ....");
    }
}

repository中的接口UserRepository.java与实现类UserRepositoryImpl.java

public interface UserRepository {
    void save();
}
@Repository("userRepository")
public class UserRepositoryImpl  implements  UserRepository{
    public void save() {
        System.out.println("UserRepository save......");
    }
}

service中的UserService.java

@Service
public class UserService {
    public void add(){
        System.out.println("UserSerive add ....");
    }
}

annotation包下的TestObject.java

@Component
public class TestObject {
}

annotation包下的主函数Main.java

public class Main {
    public static void main(String[] args) {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("bean.xml");
        TestObject testObject = (TestObject) applicationContext.getBean("testObject");
        System.out.println(testObject);

        UserController userController = (UserController) applicationContext.getBean("userController");
        System.out.println(userController);

        UserService userService = (UserService) applicationContext.getBean("userService");
        System.out.println(userService);

        UserRepositoryImpl userRepository = (UserRepositoryImpl)applicationContext.getBean("userRepository");
        System.out.println(userRepository);
    }
}

配置xml文件

<!--  context:exclude-filter 配置type属性
        annotation:指定忽略的注解,后面的expression属性指定注解的路径;
        assignable:指定要忽略的类,后面的expression属性指定类的路径;
      context:include-filter 配置只加载的内容,当需要使用的时候需要在context:component-scan上配置use-default-filters属性为false,其他和属性和context:exclude-filter一样
 -->
       <context:component-scan base-package="spring.annotation" >
<!--        <context:exclude-filter type="assignable" expression="org.springframework.stereotype.Repository"/>-->
<!--        <context:include-filter type="assignable" expression="spring.annotation.controller.UserController"/>-->
    </context:component-scan>

运行结果
在这里插入图片描述

配置过滤

修改xml文件

 <context:component-scan
            base-package="spring.annotation"
            resource-pattern="repository/*.class"
    >
    </context:component-scan>

注意其中resource-pattern所指向的是在base-package内容的基础上进行指定的

主函数

    public static void main(String[] args) {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("bean.xml");
        UserRepositoryImpl userRepository = (UserRepositoryImpl) applicationContext.getBean("userRepository");
        System.out.println(userRepository);
    }

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值