Spring之Bean的装配

Spring的装配方式有三种:

  • 隐式的bean扫描发现机制和自动装配
  • 在java中进行显示配置
  • 在XML中进行显示配置

1 . 隐式的bean扫描发现机制和自动装配

我们经常使用的都是这种方式,当我们使用SSM框架或者Springboot项目时在三层架构里面都是使用这种方式:控制层调用服务层,服务层调用数据层,我们都是使用@Controller,@Service,@Repository,这各种注解来在Spring容器中创建Bean, 然后需要使用Bean的时候使用@Autowired的来注入使用。

但spring默认是不启用组件扫描的,可以在XML中配置加上<context:component-scan base-package="xx"/>。还有一种方法:在新建一个配置类,类中可以什么不用写,在配置类上加上@ComponentScan注解,spring会自动扫描改配置类所在的包
问题: 为啥我们在使用Springboot项目时,好像没咋使用过@ComponentScan,这个注解?

因为Springboot已经封装好了ComponentScan,它的底层使用了ComponentScan这个注解,它回自动扫描一些包。

2. 在java中进行显示配置

一般通过组件扫描和自动装配方式就比较方便了,但如果由于需求我们要使用第三方的库的类,在这种情况没有办法到第三方库中去给类加注解,就不能使用第一种方法了。这时得采用Java的显示装配

使用场景:例如,我们需要使用到底层的类(比如说:我们需要使用Shiro的一些底层的类,将它注入到Spring容器中,因为我们后面会使用到这个Bean),显然,我们不能在Shiro这个类中添加@Component这样的注解,所以我们就会有第二中方法
代码样例:

package com.southwind.config;

import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import com.southwind.realm.AccoutRealm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Hashtable;
import java.util.Map;

//@Configuration
public class ShiroConfig {

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
        ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
        factoryBean.setSecurityManager(securityManager);
        //权限设置
        Map<String,String> map = new Hashtable<>();
        map.put("/main","authc"); // 访问main的时候一定要是登录的一个状态
        //下面两个是基于登录的,因为只有在登录之后才可能有权限和角色
        map.put("/manage","perms[manage]");//访问manage的时候,一定要有一个manage权限才能去访问
        map.put("/administrator","roles[administrator]");//。。。,一定要是administrator角色才可以访问。
        factoryBean.setFilterChainDefinitionMap(map);
        //设置登录页面
        factoryBean.setLoginUrl("/login");
        //设置未授权页面
        factoryBean.setUnauthorizedUrl("/unauth");
        return factoryBean;
    }


    @Bean
    public DefaultWebSecurityManager securityManager(@Qualifier("accoutRealm") AccoutRealm accoutRealm){
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        manager.setRealm(accoutRealm);
        return manager;
    }
	
    @Bean
    public AccoutRealm accoutRealm(){
        return new AccoutRealm();
    }
	//这个是用来整合thymeleaf的
    @Bean
    public ShiroDialect shiroDialect(){
        return new ShiroDialect();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值