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

广告建设网站建设淮北建网站费用

广告建设网站建设,淮北建网站费用,2022最新热点时评十篇,wordpress 3源码什么是SpringIOC#xff1f; 答#xff1a;IOC即控制反转#xff0c;就是我们不在手动的去new一个对象#xff0c;而是将创建对象的权力交给Spring去管理#xff0c;我们想要一个User类型的对象#xff0c;就只需要定义一个User类型的变量user1#xff0c;然后让Spring去…什么是SpringIOC 答IOC即控制反转就是我们不在手动的去new一个对象而是将创建对象的权力交给Spring去管理我们想要一个User类型的对象就只需要定义一个User类型的变量user1然后让Spring去给我们创建对象然后将创建的对象注入到user1中。 什么是依赖注入 答DI机制DependencyInjection依赖注入上面提到的Spring将它创建的对象交给我们创建的变量的过程。依赖注入的方式有三种set方法注入、构造器注入、注解注入。下面我们简答的实现注解注入了解IOC原理。 第一步创建注解 创建的注解其实没有太大的作用就是用来标记哪个类需要Spring帮我们去管理哪个成员变量需要Spring去给我们注入。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** *创建注解文件Component.java *标记需要IOC的类 **/ Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) public interface Component { }import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** *创建注解文件Autowired.java *标记需要Spring帮忙DI的成员变量 **/ Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface Autowired { } 第二部创建两个需要注解的类 我们想要将MyService和MyController都交给Spring管理项目启动后将这两个类实例化然后放入一个HashMap中等待调用 import com.xiaoran.springioc.annotation.Component; Component public class MyService {private int id;private String name;private int age;public void speck(String name,int age) {System.out.println(大家好,我叫name今年age岁了,请多多关照!);} }import com.xiaoran.springioc.annotation.Autowired; import com.xiaoran.springioc.annotation.Component; Component public class MyController {Autowiredprivate MyService myService;public void test(){myService.speck(moss,67);} }第三步IOC过程 创建MyIOC类用于IOC过程 在项目启动时实例化MyIOC加载MyIOC的无参构造器时对项目下所有的文件进行扫描调用实例化方法完成被注释类的实例化和依赖注入。 private String basePathD:\\Project\\XiaoRanIOC\\src\\main\\java\\com\\xiaoran\\springioc\\; //项目路径private String basePackagecom.xiaoran.springioc; //包路径private ListString filePaths;//所有文件的路径private ListString beanNames;//所有.java文件的全限定名private MapString, Object beans new HashMap();/*** 实例化MyIOC时,让IOC进程伴随无参构造器加载启动*/public MyIOC() throws FileNotFoundException, IllegalAccessException {//扫描路径下所有文件scan();beanNames new ArrayList();initBeanNames();initBeans();}扫描项目下所有文件,将所有文件的路径存入filePaths中 /*** 扫描项目下所有文件,将所有文件的路径存入filePaths中*/public void scan() throws FileNotFoundException {File file new File(basePath);filePathsnew ArrayList();if (file.exists()) {//将file放入列,出队后判断,如果是路径那就继续入队,如果是文件,就将文件路径放入filePaths中QueueFile queue new LinkedList();queue.add(file);while (!queue.isEmpty()) {File poll queue.poll();if(pollnull){continue;}if (poll.isDirectory()){File[] files poll.listFiles();for (File f :files) {queue.add(f);}}else{filePaths.add(poll.getPath());}}}else {throw new FileNotFoundException(basePath 不存在);}}将所有的.java文件的全限定名放入beanNames中 /***将所有的.java文件的全限定名放入beanNames中*/public void initBeanNames(){for (String string :filePaths) {String replace string.replace(basePath, );if (replace.endsWith(.java)) {replace replace.substring(0, replace.length() - 5);}char[] chars replace.toCharArray();for (int i 0; i chars.length; i) {if(chars[i]\\){chars[i] .;}}beanNames.add(basePackage.new String(chars));}}核心代码:将被Component注解的类实例化放入beans(HashMap)中,等待调用 /***核心代码:将被Component注解的类实例化放入beans(HashMap)中,等待调用*/public void initBeans() throws IllegalAccessException {//遍历包路径下所有类,是否被Component注解,如果被注解就将其实例化放入beansfor (String beanName :beanNames) {try {Class? aClass Class.forName(beanName);//获取类的所有注解Annotation[] declaredAnnotation aClass.getDeclaredAnnotations();//遍历所有注解,是否是Component注解for (Annotation annotation :declaredAnnotation) {if (annotation instanceof Component){Object o aClass.newInstance();beans.put(beanName, o);}}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();}}//遍历所有的beans的成员变量,如果有成员变量被Autowired修饰,就根据成员变量的类型从beans中查找到对应的对象,用此对象给成员变量注入//因为是从beans中查找对象,所以被注入的成员变量对应的类一定是已经被实例化放入beans中的for (Map.EntryString, Object entry : beans.entrySet()) {Object value entry.getValue();Field[] fields value.getClass().getDeclaredFields();for (Field f :fields) {Annotation[] declaredAnnotations f.getDeclaredAnnotations();for (Annotation annotation :declaredAnnotations) {if (annotation instanceof Autowired){//获取被Autowired注解成员变量的类型(全限定名)String typeName f.getType().getName();Object o beans.get(typeName);//暴力反射f.setAccessible(true);//将从beans中获得的对象o,注入到该属性上f.set(value,o);}}}}}/*** 对外提供一个方法:根据全限定名返回对象*/public Object getInstance(String beanName){return beans.get(beanName);}第四步测试 创建测试类IOCTest import com.xiaoran.springioc.entity.MyController; import com.xiaoran.springioc.ioc.MyIOC; import org.junit.Test; import java.io.FileNotFoundException; public class IOCTest {Testpublic void test() throws FileNotFoundException, IllegalAccessException {MyIOC myIOC new MyIOC();MyController myController (MyController)myIOC.getInstance(MyController.class.getName());myController.test();} } GitHub 手撕SpringIOC
http://www.w-s-a.com/news/866760/

相关文章:

  • cms 导航网站鹤壁做网站价格
  • 微信营销软件免费版郑州关键词优化费用
  • 邢台专业做网站哪家好临沂网站建设中企动力
  • 建设网站是主营成本吗wordpress 后台
  • 猎头可以做单的网站企业网站建设
  • 建小程序需要网站吗在putty上怎样安装wordpress
  • 天津智能网站建设找哪家WordPress相册插件pro
  • 电脑网站页面怎么调大小济宁网站建设软件开发
  • 亿玛酷网站建设广州增城区最新消息
  • 企业网站视频栏目建设方案中企动力网站模板
  • 网站页面策划国外注册域名的网站
  • 百中搜如何做网站排名网站维护一年一般多少钱
  • 镇江地区做网站的公司wordpress说说加分类
  • 深圳高端网站设计免费的关键词优化软件
  • 视频网站公司沈阳网站建设服务
  • 网站全屏代码做网站必须用对方服务器
  • 网站速度慢wordpressssl正式申请后wordpress
  • 那个网站做玉石最专业西瓜创客少儿编程加盟
  • 备案时的网站建设方案书免费软件库
  • 惠州外贸网站建设网站模板 兼容ie8
  • 南京淄博网站建设方案php网站开发实训感想
  • 网站设计的含义只做恐怖片的网站
  • 网站改版方案ppt室内装修公司简介
  • 做色网站wordpress twenty ten
  • 马鞍山建设工程监督站建管处网站免费的海报模板网站
  • 类似百度的网站移动端的网站怎么做的
  • 网站开发需要什么文凭网站分析的优劣势
  • 海尔网站建设不足之处山东网站营销
  • 楚雄 网站建设广告设计一般人能学吗
  • 热搜榜排名前十山东seo多少钱