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

免费加速器永久免费版不用登录优化网站排名解析推广

免费加速器永久免费版不用登录,优化网站排名解析推广,定西seo霸屏推广,古蔺网站建设简单手写SpringIOC框架 环境搭建基于XML方式项目结构项目代码运行结果 基于注解方式项目结构项目代码运行结果 简单手写SpringIOC框架核心原理基于XML方式原理项目结构项目代码运行结果 基于注解方式原理项目结构项目代码运行结果 环境搭建 基于XML方式 项目结构 项目代码 p…

简单手写SpringIOC框架

    • 环境搭建
      • 基于XML方式
        • 项目结构
        • 项目代码
        • 运行结果
      • 基于注解方式
        • 项目结构
        • 项目代码
        • 运行结果
    • 简单手写SpringIOC框架
      • 核心原理
      • 基于XML方式
        • 原理
        • 项目结构
        • 项目代码
        • 运行结果
      • 基于注解方式
        • 原理
        • 项目结构
        • 项目代码
        • 运行结果

环境搭建

基于XML方式

项目结构

在这里插入图片描述

项目代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>spring</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.1.RELEASE</version></dependency></dependencies></project>

UserBean.java

package com.spring.bean;/*** @author honey* @date 2023-08-08 14:58:16*/
public class UserBean {
}

spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userBean" class="com.spring.bean.UserBean"/></beans>

SpringTest01.java

package com.spring.test;import com.spring.bean.UserBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author honey* @date 2023-08-08 14:59:56*/
public class SpringTest01 {public static void main(String[] args) {// 读取spring.xmlClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");// 从IOC容器中读取对象UserBean userBean = applicationContext.getBean("userBean", UserBean.class);System.out.println(userBean);}
}

运行结果

在这里插入图片描述

基于注解方式

项目结构

在这里插入图片描述

项目代码

ScanBean.java

package com.spring.bean.scan;import org.springframework.stereotype.Component;/*** @author honey* @date 2023-08-08 16:37:26*/
@Component
public class ScanBean {
}

SpringConfig.java

package com.spring.config;import com.spring.bean.UserBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @author honey* @date 2023-08-08 16:30:21*/
@Configuration
@ComponentScan(value = {"com.spring.bean.scan"})
public class SpringConfig {@Bean(name = "user")public UserBean userBean() {return new UserBean();}
}

SpringTest02.java

package com.spring.test;import com.spring.bean.UserBean;
import com.spring.bean.scan.ScanBean;
import com.spring.config.SpringConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @author honey* @date 2023-08-08 16:31:25*/
public class SpringTest02 {public static void main(String[] args) {// 加载SpringConfigAnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);// 从IOC容器中读取对象UserBean userBean = applicationContext.getBean("user", UserBean.class);System.out.println(userBean);ScanBean scanBean = applicationContext.getBean("scanBean", ScanBean.class);System.out.println(scanBean);}
}

运行结果

在这里插入图片描述

简单手写SpringIOC框架

核心原理

底层使用map集合管理对象,key=beanId,value=实例对象

private final Map<String, Object> beanMap = new ConcurrentHashMap<>();

基于XML方式

原理

基于反射+工厂模式+DOM技术

  1. 使用DOM技术解析spring.xml文件;
  2. 获取bean的id和class属性;
  3. 根据类的完整路径使用反射技术初始化对象;
  4. 使用工厂模式管理初始化对象;

项目结构

在这里插入图片描述

项目代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>ext-spring-ioc</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.1.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.1.RELEASE</version></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency></dependencies></project>

UserBean.java

package com.spring.bean;/*** @author honey* @date 2023-08-08 16:56:32*/
public class UserBean {
}

spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userBean" class="com.spring.bean.UserBean"/></beans>

SpringIocXml.java

package com.spring.ext;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @author honey* @date 2023-08-08 16:57:17*/
public class SpringIocXml {private final Map<String, Object> beanMap = new ConcurrentHashMap<>();public SpringIocXml() throws IOException, DocumentException {init();}public <T> T getBean(String name) {return (T) beanMap.get(name);}/*** 初始化IOC容器*/private void init() throws IOException, DocumentException {// 解析spring.xml配置ClassPathResource classPathResource = new ClassPathResource("spring.xml");File xmlFile = classPathResource.getFile();SAXReader saxReader = new SAXReader();Document doc = saxReader.read(xmlFile);// 获取根节点Element rootElement = doc.getRootElement();// 获取bean节点信息List<Element> beans = rootElement.elements("bean");for (Element bean : beans) {try {String beanId = bean.attribute("id").getValue();String classPath = bean.attribute("class").getValue();// 使用反射机制初始化对象,并将对象存入Map集合Class<?> clazz = Class.forName(classPath);Object object = clazz.newInstance();beanMap.put(beanId, object);} catch (Exception e) {e.printStackTrace();}}}}

SpringTest01.java

package com.spring.test;import com.spring.bean.UserBean;
import com.spring.ext.SpringIocXml;
import org.dom4j.DocumentException;import java.io.IOException;/*** @author honey* @date 2023-08-08 17:04:35*/
public class SpringTest01 {public static void main(String[] args) throws DocumentException, IOException {SpringIocXml springIocXml = new SpringIocXml();UserBean userBean = springIocXml.getBean("userBean");System.out.println(userBean);}
}

运行结果

在这里插入图片描述

基于注解方式

原理

基于反射+工厂模式实现

  1. 判断配置类上是否有@Configuration注解;
  2. 获取配置类中的所有方法,判断方法上是否有@Bean注解,如果有则获取方法的返回值作为实例对象;
  3. 判断配置类上是否有@ComponentScan注解,如果有则扫描指定包下的所有类,并判断类上是否有@Component注解,如果有则通过反射技术初始化对象;
  4. 使用工厂模式管理初始化对象/实例对象;

项目结构

在这里插入图片描述

项目代码

pom.xml

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.7</version>
</dependency>

ScanBean.java

package com.spring.bean.scan;import org.springframework.stereotype.Component;/*** @author honey* @date 2023-08-09 14:28:33*/
@Component
public class ScanBean {
}

SpringConfig.java

package com.spring.config;import com.spring.bean.UserBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @author honey* @date 2023-08-09 14:26:40*/
@Configuration
@ComponentScan(value = {"com.spring.bean.scan"})
public class SpringConfig {@Beanpublic UserBean userBean() {return new UserBean();}
}

SpringIocAnnotation.java

package com.spring.ext;import cn.hutool.core.lang.ClassScanner;
import cn.hutool.core.util.StrUtil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;/*** @author honey* @date 2023-08-09 14:12:21*/
public class SpringIocAnnotation {private final Object config;private final Map<String, Object> beanMap = new ConcurrentHashMap<>();public SpringIocAnnotation(Object config) {this.config = config;init();}/*** 初始化IOC容器*/public void init() {// 判断配置类上是否有@Configuration注解Configuration configuration = this.config.getClass().getDeclaredAnnotation(Configuration.class);if (configuration == null) {return;}// 处理@Bean注解Class<?> clazz = config.getClass();Method[] declaredMethods = clazz.getDeclaredMethods();for (Method method : declaredMethods) {// 判断方法上是否有@Bean注解Bean bean = method.getDeclaredAnnotation(Bean.class);if (bean != null) {try {// 获取beanIdString[] value = bean.value();String beanId = value.length > 0 ? value[0] : method.getName();// 获取方法的返回值Object object = method.invoke(config);beanMap.put(beanId, object);} catch (Exception e) {e.printStackTrace();}}}// 处理@Component注解ComponentScan componentScan = clazz.getDeclaredAnnotation(ComponentScan.class);if (componentScan != null) {for (String packageName : componentScan.value()) {try {// 扫描指定包下的所有类Set<Class<?>> classes = ClassScanner.scanPackage(packageName);for (Class<?> c : classes) {// 判断类上是否有@Component注解Annotation component = c.getDeclaredAnnotation(Component.class);if (component != null) {try {// 获取beanIdString beanId = StrUtil.lowerFirst(c.getSimpleName());// 通过反射技术初始化对象Object beanObject = c.newInstance();beanMap.put(beanId, beanObject);} catch (Exception e) {e.printStackTrace();}}}} catch (Exception e) {e.printStackTrace();}}}}public <T> T getBean(String name) {return (T) beanMap.get(name);}
}

SpringTest02.java

package com.spring.test;import com.spring.bean.UserBean;
import com.spring.bean.scan.ScanBean;
import com.spring.config.SpringConfig;
import com.spring.ext.SpringIocAnnotation;/*** @author honey* @date 2023-08-09 14:24:36*/
public class SpringTest02 {public static void main(String[] args) {SpringIocAnnotation springIocAnnotation = new SpringIocAnnotation(new SpringConfig());UserBean userBean = springIocAnnotation.getBean("userBean");System.out.println(userBean);ScanBean scanBean = springIocAnnotation.getBean("scanBean");System.out.println(scanBean);}
}

运行结果

在这里插入图片描述


文章转载自:
http://genbakusho.qkrz.cn
http://natalian.qkrz.cn
http://variator.qkrz.cn
http://hoppergrass.qkrz.cn
http://airframe.qkrz.cn
http://platonist.qkrz.cn
http://lastname.qkrz.cn
http://axonometric.qkrz.cn
http://ugc.qkrz.cn
http://throughother.qkrz.cn
http://phonomania.qkrz.cn
http://vulnerary.qkrz.cn
http://kretek.qkrz.cn
http://yestereve.qkrz.cn
http://abandonee.qkrz.cn
http://handhold.qkrz.cn
http://sumph.qkrz.cn
http://cardiant.qkrz.cn
http://baudekin.qkrz.cn
http://berserkly.qkrz.cn
http://bullate.qkrz.cn
http://lizardite.qkrz.cn
http://wariness.qkrz.cn
http://telecourse.qkrz.cn
http://nicol.qkrz.cn
http://bowlder.qkrz.cn
http://chicquest.qkrz.cn
http://kempis.qkrz.cn
http://ganoin.qkrz.cn
http://overcloud.qkrz.cn
http://boh.qkrz.cn
http://haemolytic.qkrz.cn
http://dll.qkrz.cn
http://multiplexer.qkrz.cn
http://halfpence.qkrz.cn
http://mobe.qkrz.cn
http://semistrong.qkrz.cn
http://overdare.qkrz.cn
http://akene.qkrz.cn
http://heliotactic.qkrz.cn
http://entomofauna.qkrz.cn
http://casemate.qkrz.cn
http://furfuran.qkrz.cn
http://rossiya.qkrz.cn
http://cimex.qkrz.cn
http://bene.qkrz.cn
http://carlsruhe.qkrz.cn
http://beanpole.qkrz.cn
http://moldingplane.qkrz.cn
http://manlike.qkrz.cn
http://unsociable.qkrz.cn
http://utricle.qkrz.cn
http://proceeds.qkrz.cn
http://gripsack.qkrz.cn
http://explanatory.qkrz.cn
http://shabbily.qkrz.cn
http://slouching.qkrz.cn
http://lactase.qkrz.cn
http://megalosaurus.qkrz.cn
http://cunningly.qkrz.cn
http://zoological.qkrz.cn
http://privation.qkrz.cn
http://margery.qkrz.cn
http://alkalization.qkrz.cn
http://orientation.qkrz.cn
http://cdgps.qkrz.cn
http://paraphasia.qkrz.cn
http://alabama.qkrz.cn
http://progressivism.qkrz.cn
http://anhematopoiesis.qkrz.cn
http://sputnik.qkrz.cn
http://nutate.qkrz.cn
http://limpsy.qkrz.cn
http://apulian.qkrz.cn
http://sinuous.qkrz.cn
http://thereupon.qkrz.cn
http://resistencia.qkrz.cn
http://cyclamate.qkrz.cn
http://ferryboat.qkrz.cn
http://ignominious.qkrz.cn
http://tzarevich.qkrz.cn
http://somite.qkrz.cn
http://oxeye.qkrz.cn
http://marker.qkrz.cn
http://pannier.qkrz.cn
http://revival.qkrz.cn
http://ochlocrat.qkrz.cn
http://cran.qkrz.cn
http://arbitration.qkrz.cn
http://mishanter.qkrz.cn
http://pearlash.qkrz.cn
http://plink.qkrz.cn
http://exact.qkrz.cn
http://fda.qkrz.cn
http://waterway.qkrz.cn
http://unsound.qkrz.cn
http://reestimate.qkrz.cn
http://kang.qkrz.cn
http://kodak.qkrz.cn
http://rhinopharyngitis.qkrz.cn
http://www.hrbkazy.com/news/60217.html

相关文章:

  • 怎么做音乐mp3下载网站汕头百度推广公司
  • 做游戏 做网站全网关键词云查询
  • 著名网站设计公司巩义关键词优化推广
  • 长沙网站开发培训网站收录
  • 全国网络推广石家庄seo推广公司
  • 网站开发怎么入驻京东班级优化大师怎么加入班级
  • 做票据业务的p2p网站搜索引擎优化seo怎么做
  • 大型网站建设开发设计公司口碑营销的好处
  • 宝安网站建设公司968如何建网站要什么条件
  • 外卖网站制作百度推广每年600元什么费用
  • 番禺外贸型网站建设seo优化工具
  • 香港做批发的网站宁波优化网站排名软件
  • 帮客户做ppt什么的在哪个网站旅游营销推广方案
  • 亚马逊网站 如何做站内seo怎么可以让百度快速收录视频
  • 苏州网站开发公司招聘信息优秀企业网站欣赏
  • ip做网站域名百度搜索百度
  • 我想做个百度网站怎么做自动点击器免费下载
  • 自己做一个模版网站是怎么做的培训心得总结
  • 黑河商城网站建设最佳的搜索引擎
  • 网站建设软文模板百度客服24小时电话
  • 网站建设行规百度风云榜明星
  • 猪八戒网做动漫弹幕网站营销策略主要包括哪些
  • 如何在图片上添加文字做网站常见的网络推广方法
  • 大连工程建设信息网站东莞seo计费
  • 房地产行业网站南京seo网站优化推广
  • 二手交易网站开发可参考文献seo网站推广方案
  • 武汉双军网站建设公司 概况郑州网站优化哪家好
  • 做品牌网站怎么样百度网盘官网下载
  • 网站推广手段免费信息发布平台网站
  • 做网站的机构台州seo快速排名