Spring框架bean的配置(3):基于注解的配置

1.基于注解的配置:

@Component: 基本注解, 标识了一个受 Spring 管理的组件

@Respository: 标识持久层组件

@Service: 标识服务层(业务层)组件

@Controller: 标识表现层组件

将这些架包放入在工程目录下建立的lib文件夹里,并解压

commons-logging-1.1.1

spring-aop-4.0.0.RELEASE

spring-beans-4.0.0.RELEASE

spring-context-4.0.0.RELEASE

spring-core-4.0.0.RELEASE

spring-expression-4.0.0.RELEASE

---------------------------------------------------------------------------

建立接口:UserRepository

package com.atguigu.spring.beans.annotation.test;

public interface UserRepository {
    void save();
}

建立类:UserRepositoryImpl继承于接口:UserRepository

package com.atguigu.spring.beans.annotation.test;

import org.springframework.stereotype.Repository;

@Repository("userRepository") //标识持久层组件
public class UserRepositoryImpl implements UserRepository {

    public void save() {
        System.out.println("panpan123");
    }
}

建立类:UserService

package com.atguigu.spring.beans.annotation.test;

import org.springframework.stereotype.Service;

@Service  //标识服务层(业务层)组件
public class UserService {
    public void add(){
        System.out.println("panpan456");
    }
}

建立类:UserController

package com.atguigu.spring.beans.annotation.test;

import org.springframework.stereotype.Controller;

@Controller  //标识表现层组件
public class UserController {
    public void test(){
        System.out.println("panpan789");
    }
}

上述类都是建立在包com.atguigu.spring.beans.annotation.test之下;

spring的xml配置文件:beansannotation.xml,在com.atguigu.spring.beans.annotation.test包或子包 下带有上述四个注解的,可以被IOC容器识别

<context:component-scan  base-package="com.atguigu.spring.beans.annotation.test" >    
</context:component-scan>

加入resource-pattern="repository/*.class,是指识别repository注解的类;

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

注解过滤:指不包含 类型是 注解,导入的包(import后面的)是org.springframework.stereotype.Repository的类;

<context:component-scan
base-package="com.atguigu.spring.beans.annotation"
<context:exclude-filter type="annotation" 
expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

取消默认的use-default-filters="false",包含...

<context:component-scan
base-package="com.atguigu.spring.beans.annotation" use-default-filters="false">
<context:include-filter type="annotation" 
expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

类过滤:type="assignable",不包含全类名是com.atguigu.spring.beans.annotation.test.UserRepository

<context:component-scan 
base-package="com.atguigu.spring.beans.annotation"
<context:exclude-filter type="assignable" expression="com.atguigu.spring.beans.annotation.test.UserRepository"/>
</context:component-scan>

类过滤:type="assignable",取消默认的use-default-filters="false",只包含全类名为com.atguigu.spring.beans.annotation.test.UserRepositoryImpl类

<context:component-scan 
base-package="com.atguigu.spring.beans.annotation" use-default-filters="false">
<context:exclude-filter type="assignable" expression="com.atguigu.spring.beans.annotation.test.UserRepositoryImpl"/>
</context:component-scan>

建立Main类,进行测试:

package com.atguigu.spring.beans.annotation.test;

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

public class Main {
    
    public static void main(String[] args) {
    
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beansannotation.xml");
        
        TestObject test=(TestObject) ctx.getBean("testObject");
        System.out.println(test);
        
        UserController controller=(UserController) ctx.getBean("userController");
        System.out.println(controller);
        
        UserService service=(UserService) ctx.getBean("userService");
        System.out.println(service);
        
        UserRepositoryImpl repository=(UserRepositoryImpl) ctx.getBean("userRepository");
        System.out.println(repository);
    }
    
    
}
原文地址:https://www.cnblogs.com/lxnlxn/p/5866479.html