当前位置: 首页 > news >正文

门户网站广告的类型舅舅建筑网

门户网站广告的类型,舅舅建筑网,如何创建个人网站赚钱,抚顺网络推广系列文章目录 手写SpringBoot#xff08;一#xff09;之简易版SpringBoot 手写SpringBoot#xff08;二#xff09;之动态切换Servlet容器 手写SpringBoot#xff08;三#xff09;之自动配置 手写SpringBoot#xff08;四#xff09;之bean动态加载 手写SpringBoot…系列文章目录 手写SpringBoot一之简易版SpringBoot 手写SpringBoot二之动态切换Servlet容器 手写SpringBoot三之自动配置 手写SpringBoot四之bean动态加载 手写SpringBoot三之自动配置 文章目录 系列文章目录手写SpringBoot三之自动配置 本节主要讲解SpringBoot的自动配置 回想一下在用原生Spring aop功能的时候需要哪些配置 引入aspectjweaver jar包 定义切面 配置切面 开启aop功能 为什么在SpringBoot中只需要引入spring-boot-starter-aop就可以直接使用aop功能 那是因为SpringBoot定义了AOP配置类帮我们完成了这些工作。 在spring-boot-auto-configure jar包中有很多SpringBoot帮我们配置好的类其中就有AopAutoConfiguration提供自动开启aop等功能 现在来写一个简易版的Springboot自动配置 当我们新增了AopConfiguration配置类后需要在MySpringBootApplication中显示import该类如果AutoConfiguration配置类很多的情况就要在import标签上面引入很多类。 利用ImportSelector接口可以将需要加载的类在selectImports方法中返回该类的全限定名称。 public class MyImportSelector implements DeferredImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[0];} }在该方法中可以显示的将需要引入的配置类全路径全部加载一个数组中然后返回再通过MySpringBootApplication Import 该MyImportSelector类就可以加载MyImportSelector中返回的类。 这样实现的弊端 在代码中写死加载的类需要新增时则需要动代码。无法通过外部配置来动态加载所需要的bean。 这里我们利用java spi机制来实现动态加载 Java SPIService Provider Interface是Java官方提供的一种服务发现机制它允许在运行时动态地加载实现特定接口的类而不需要在代码中显式地指定该类从而实现解耦和灵活性。 定义一个特定的接口类 AutoConfiguration在resource文件夹下新建META-INF/services文件夹在该services文件夹下新建AutoConfiguration全限定名的文件。在AutoConfiguration全限定名的文件下配置需要加载的类全限定名称。在MyImportSelector中实现加载java spi机制的类]将MySpringBootApplication 中的Import标签改为引入MyImportSelector AutoConfiguration接口定义 package cn.axj.springboot.my.config;/** * 该类仅是一个标识作用 */ public interface AutoConfiguration { } 新建AutoConfiguration文件,cn.axj.springboot.my.config.AutoConfiguration AutoConfiguration中配置如下 cn.axj.springboot.my.config.WebServerAutoConfiguration cn.axj.springboot.my.config.AopAutoConfiguration此时WebServerAutoConfiguration和AopAutoConfiguration需要实现AutoConfiguration MyImportSelector实现 package cn.axj.springboot.my.config;import org.springframework.context.annotation.DeferredImportSelector; import org.springframework.core.type.AnnotationMetadata;import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader;public class MyImportSelector implements DeferredImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {/*** 主要这里加载的是所有命名为cn.axj.springboot.my.config.AutoConfiguration的文件下的定义的类不仅仅指该spring-boot jar包.* 其他jar包只要在resources目录下定义了AutoConfiguration的类都会被加载进来。* 这里可以提供动态扩展能力。*/ServiceLoaderAutoConfiguration serviceLoader ServiceLoader.load(AutoConfiguration.class);ListString list new ArrayList();for (AutoConfiguration autoConfiguration : serviceLoader) {list.add(autoConfiguration.getClass().getName());}return list.toArray(new String[0]);} } MySpringBootApplication中改造 Documented Retention(RetentionPolicy.RUNTIME) Configuration ComponentScan Target(ElementType.TYPE) Import(MyImportSelector.class) public interface MySpringBootApplication { }当前结构图 启动user-service模块并在MySpringApplication 中容器创建完成后打开debug。 可以看到AopAutoConfiguration 和 WebServerAutoConfiguration 均加载到了容器中。 当其他三方组件也想整合进springboot怎么办由于其他组件无法获取到AutoConfiguration接口所以需要将AutoConfiguration接口提出来专门弄一个jar包供三方组件使用。 新建模块 my-spring-boot-configuration,并将AutoConfiguration类迁移过去。 在my-spring-boot模块中引入 my-spring-boot-configuration 项目结构如上 下面来构建mybatis 整合springboot的jar包 spring整合mybatis 主要是整合SqlSessionFactoryBean将这个bean交给Spring管理 SqlSessionFactoryBean 主要设置DataSourceMapperLocationConfigLocaltion等信息。 新建my-mybatis-spring-boot-starter模块 引入依赖jar包 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcn.axj/groupIdartifactIdspring-boot-base/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdmy-mybatis-spring-boot-starter/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencies!-- MyBatis --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.9/version/dependency!-- MyBatis-Spring 整合包 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.4/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.18/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.19/version/dependencydependencygroupIdcn.axj/groupIdartifactIdmy-spring-boot-configuration/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.18/version/dependency/dependencies/project创建自动配置的MybatisAutoConfiguration类 package cn.axj.mybatis.springboot.config;import cn.axj.springboot.my.config.AutoConfiguration; import com.alibaba.druid.pool.DruidDataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource; import java.io.IOException;Configuration public class MyBatisAutoConfiguration implements AutoConfiguration {Beanpublic DataSource dataSource(){DruidDataSource druidDataSource new DruidDataSource();druidDataSource.setDriverClassName(com.mysql.cj.jdbc.Driver);druidDataSource.setUsername(root);druidDataSource.setPassword(123456);druidDataSource.setUrl(jdbc:mysql://192.168.56.102:3306/springtest?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneUTC);return druidDataSource;}Beanpublic SqlSessionFactoryBean sqlSessionFactory() throws IOException {SqlSessionFactoryBean sqlSessionFactoryBean new SqlSessionFactoryBean();PathMatchingResourcePatternResolver resourcePatternResolver new PathMatchingResourcePatternResolver();sqlSessionFactoryBean.setDataSource(dataSource());sqlSessionFactoryBean.setConfigLocation(resourcePatternResolver.getResource(classpath:mybatis-config.xml));sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources(classpath:mapper/*Mapper.xml));return sqlSessionFactoryBean;} } 为了简便将数据源这些信息写死这些信息可以提供配置类给用户使用。 在resources目录下创建mybatis-config.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd configuration/configuration 创建自动配置的文件路径META-INF/services,并创建文件cn.axj.springboot.my.config.AutoConfiguration并将MyBatisAutoConfiguration的全限定名称配置进去 cn.axj.mybatis.springboot.config.MyBatisAutoConfiguration下面开始测试 在user-service模块中引入my-mybatis-spring-boot-starter,并引入mysql连接包 dependencygroupIdcn.axj/groupIdartifactIdmy-mybatis-spring-boot-starter/artifactIdversion1.0-SNAPSHOT/version /dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version /dependency创建Model包并创建User package cn.axj.user.model;public class User {private Integer id;private String username;...省略get set 方法Overridepublic String toString() {return User{ id id , username username \ };} } 创建mapper包并新增UserMapper package cn.axj.user.mapper;import cn.axj.user.model.User; import org.apache.ibatis.annotations.Mapper;Mapper public interface UserMapper {User selectById(Integer id); } 在resources目录下创建mapper文件并创建UserMapper.xml文件 ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecn.axj.user.mapper.UserMapperselect idselectById resultTypecn.axj.user.model.Userselect id,username from user where id #{id}/select /mapper改造UserService引入UserMapper查询User package cn.axj.user.service;import cn.axj.user.mapper.UserMapper; import cn.axj.user.model.User; import org.springframework.stereotype.Service;import javax.annotation.Resource;Service public class UserService {ResourceUserMapper userMapper;public User test(Integer id){User user userMapper.selectById(id);return user;} } 改造TestController,查询返回User对象 package cn.axj.user.controller;import cn.axj.user.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;RestController public class TestController {Resourceprivate UserService userService;GetMapping(value /test)public String test(Integer id){return userService.test(id).toString();} } 这里由于没有配置HttpMessageConverter,无法将对象转换成字符串形式所以用了toString方法。 在UserApplication主类上新增MapperScan(“cn.axj.user.mapper”)扫描mapper文件。 这个问题我在MyBatisAutoConfiguration中配置MapperScannerConfigurer,但是无法生效mybatis不会去扫描响应的包并生成代理对象不知道什么原因但是加在主类上就可以难道mybatis将SqlSessionFactoryBean交给Spring容器后就不自己扫描了吗 项目结构图如下 至此启动项目。这里记得引入默认的tomcat 容器不然会无法启动。 通过浏览器访问 localhost:8080/test?id1 或者 id 2 可以看到整合mybatis成功成功返回数据。
http://www.zqtcl.cn/news/255874/

相关文章:

  • 建网站的公司南京网站权重是什么
  • 网站建设策略百度云域名没有备案怎么做网站
  • 档案网站建设图片网站名查找
  • 九亭镇村镇建设办官方网站好看的网站设计公司
  • 怎样建立门户网站怎么用wordpress模板
  • 潍坊专业建站wordpress建个人博客
  • 手把手网站开发网站建设违法行为
  • 网站模板插件做网站要审批吗
  • 建立网站如何盈利有哪些做室内设计好用的网站有哪些
  • 商城网站设计服务商网站开发时的闭包写法
  • 福建永安建设局网站如何在百度免费发布广告
  • 网站建设要用到哪些应用工具国际新闻最新消息今天2024年
  • 网站代码怎么打开门户网站建设目的
  • 个人网站开发项目总结做网站模板的网页名称是m开头
  • 响水哪家专业做网站win wordpress
  • 做图标去什么网站找微网页制作软件手机版
  • 网站开发源程序网页宣传方案
  • 做婚礼设计在哪个网站下载素材西安企业网站建设
  • 灵犀科技网站开发佼佼者门户网站建设和检务公开整改
  • php mysql做网站登录免费素材哪里找
  • 休闲食品网站建设网页设计网站实例
  • 微信网站结构58同城北京网站建设
  • thinkcmf做网站快不快南宁网站建设找哪家好
  • 百度网站类型西部数码官网
  • app和网站哪个难做如何做本地网站
  • 怎么做网站导航栏个性化定制产品
  • 如何做企业网站排名优化工业设计公司logo
  • 怎样制作网站教程中国建设银行总部网站
  • 美食网站建设规划书辽宁建设工程信息网中标通知
  • iis搭建网站教程深圳注册公司条件