Spring框架学习笔记8-使用注解装配Bean

八、Spring基于Annotation装配Bean对象
在Spring中,尽管使用xml配置可以实现Bean的装配工作,但是如果应用中Bean的数量较多,会导致xml配置文件过于臃肿,造成维护困难。Spring框架提供一些用于装配Bean对象的注解,来替换xml文件配置方式。
1 jar包依赖
spring核心容器模块
beans
context
core
expression
spring aop模块
aop
日志
comons-logging
2 spring配置文件中开启注解扫描
context:component-scan base-package=“扫描注解的包名”
3 注册bean对象
3.1 @Component
可以作用任何层次。一般是非业务层,控制层,持久层的类用这个。
3.2@Service
作用业务层。
3.3@Repository
持久层。
3.4@Controller
spring mvc中控制层。
代码测试。使用spring获取管理的对象id查看对象有没有被实例化,id是什么。
xml

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

持久层

package com.bjsxt.dao;

public interface UsersDao {
}
package com.bjsxt.dao.impl;

import com.bjsxt.dao.UsersDao;
import org.springframework.stereotype.Repository;

@Repository("suibianDao")
public class UsersDaoImpl implements UsersDao {
}

业务层

package com.bjsxt.service;

public interface UsersService {
}
package com.bjsxt.service.impl;

import com.bjsxt.service.UsersService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

//@Component
@Service("suibian")
public class UsersServiceImpl implements UsersService {
}

测试

package com.bjsxt.test;

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

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取id名
        String [] ids = applicationContext.getBeanDefinitionNames();
        for (String id:ids) {
            System.out.println(id);
        }
    }
}

运行结果
默认id名是类名首字母小写。加入参数后名称改变为自定义字符串名称。
在这里插入图片描述
4 Bean对象依赖注入注解
4.1@Autowired
对成员变量,方法,构造方法标注,完成Bean的自动注入处理。按类型。
spring框架启动后,扫描有注解的包中的所有类,对于有@Comonent的类实例化,加到hashmap中管理。有@Autowired的变量,去寻找类型一样的,把变量注入。
4.2@Resource
是javax下的类。spring 根据bean id找对象,找不到再根据类型找对象。
4.3@Qualifier
与@Autowired配合使用,将按照类型找,转变成按照bean id找。名称是@Qualifier参数。
4.4@Value
获取properties文件中的值。
代码
在这里插入图片描述

在这里插入图片描述
运行结果
在这里插入图片描述
5Spring配置相关注解
5.1@Configuration
声明当前类为配置类,相当于xml形式的spring配置,该注解要加到类上。
5.2@Bean
注解在方法上,声明当前方法的返回值为一个Bean对象,该对象会被添加在springioc容器中,和标签的作用相同。bean的实例名称由@Qualifier注解的参数指定,
代码:使用配置注解实例化持久层对象,在测试类中打印它的id,并打印它本身。

package com.bjsxt.config;

import com.bjsxt.dao.UsersDao;
import com.bjsxt.dao.impl.UsersDaoImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//相当于配置文件中配置bean
//springframework中不能去掉xml
@Configuration
public class SpringConfig {
    @Bean
    public UsersDao usersDaoInit(){
        return new UsersDaoImpl();
    }
}
package com.bjsxt.dao.impl;

import com.bjsxt.dao.UsersDao;
import org.springframework.stereotype.Repository;

//@Repository("suibianDao")
public class UsersDaoImpl implements UsersDao {
}
package com.bjsxt.test;

import com.bjsxt.dao.UsersDao;
import com.bjsxt.service.UsersService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取id名
        String [] ids = applicationContext.getBeanDefinitionNames();
        for (String id:ids) {
            System.out.println(id);
        }
        // 输出对象
        UsersDao usersDaoInit = (UsersDao)applicationContext.getBean("usersDaoInit");
        System.out.println("ud "+usersDaoInit);
        //UsersService us = (UsersService)applicationContext.getBean("suibian");
        //UsersDao ud = (UsersDao)applicationContext.getBean("suibianDao");
        //System.out.println("us "+us);System.out.println("ud "+ud);
    }
}

运行结果
id是方法名。spring扫描包时候会把配置类也管理起来。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值