springboot原理的理解
基础服务层用springclound的思想是要用controller作为入口,用dubbo的思想一般是server直接被调用 这种都可以实现分布式
单纯的springboot可以实现ha(用redissession共享),但是分布式的话积就类似http调用了(控制层和服务层在一起),和springcloud比没有注册发现,
(自己写的代码,框架中的源码都如此)先校验有没有自定义了同名的bean,有自定义就用自定义的,没有就用框架默认的
start 引入的是自动配置修改一些配置文件即可(主类中开启),===否则需要自定义配置就用@Configuration
配置中自定义的bean,先定义好,然后@bean new好,@Bean的东西会同名注入框架,也可手动set
shiro使用redis做session管理就像将spring的缓存实现类配置成redis一样,sessiondao可以自己写,也可用shiro-redis.jar中现成的(bank-web)
用xml:
1,ImportResource(propertyresource加载属性文件)
2,转化成对象
3,类似框架中转化
Resource[] mappers = resourceResolver.getResources(mapperLocation);
resources.addAll(Arrays.asList(mappers));
mybatis.mapper-locations=classpath:mapper/*.xml
核心流程的对应配置:
@SpringBootApplication
@EnableTransactionManagement
@MapperScan(basePackages = "com.houbank.bank.web.mapper")
public class BankWebApplication extends SpringBootServletInitializer{
}
springboot相当于框架启动入口,所有的配置集成这之后完成
@springbootapplication:
@springbootconfiguration---扫描所有的配置类
@enabloeautoconfiguration---自动装配所有的start框架中的spring.factories框架
@componentscan ---扫描注解的范围
有上述就配置成功了所有的框架集成---这些就主导了springboot的主要启动流程,其他没有的例如开启事物,扫描等需要在入口另加注解 @EnableTransactionManagement @MapperScan(basePackages = "com.houbank.bank.web.mapper")
@EnableTransactionManagement @MapperScan 等类似配置主要是配置的延展(比自定义配置更自动只要打开配置,不要重头开始定义配置),和修改(修改一存在的容器中的值)
@import
@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载在4.2之前只支持导入配置类
在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean(直接实例化放在容器中)
@EnableTransactionManagement 这种方式的开启过程其实就是@importSelrctor 框架的解析器ConfigurationClassParser遇到这个会解析成配置类
利用其selectImports方法导入里面指定类的bean,后可以在框架容器中使用,所以@importSelrctor功能类似@import 即@EnableTransactionManagement也就是引入相应功能的配置
@MapperScan(basePackages = "com.houbank.bank.web.mapper") ---》 @Import(MapperScannerRegistrar.class) 注册到相应的已有的上下文,达到配置的重修改
======
springboot
1,主类
2,配置类
3,配之类使用的基础类----一般没有ioc注解,可以有di注解,配之类用@bean
4,普通的controller,service,dao层
2-3就是补充1主类中的扫描自定义配置部分
用于配置的类我们可能不会用@component,@service,@controller,@respostity 会在
@configuration类中 new 然后@bean到容器中,但是这个类可以有@resource,@autowire等注入标签,编译的时候不会出错,在使用的时候有@bean使得进入
spring的容器所以可以使用
public class MyShiroRealm extends AuthorizingRealm {
@Resource
private UserService userService;
@Resource
private ResourcesService resourcesService;
}
@Configuration
public class ShiroConfig {
@Bean
public MyShiroRealm myShiroRealm(){
MyShiroRealm myShiroRealm = new MyShiroRealm();
myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
return myShiroRealm;
}
}
参看:
https://blog.csdn.net/m0_37444820/article/details/81044382
http://www.cnblogs.com/niechen/p/9262452.html