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

精品网站建设需要多少钱泰安seo培训

精品网站建设需要多少钱,泰安seo培训,wordpress按作者分类,网站数据分析平台1、IoC\nIoC(Inversion of Control,控制反转)是一种软件设计思想,它的核心思想是将对象之间的依赖关系交给容器来管理,从而降低对象之间的耦合度,提高代码的灵活性和可维护性。\n\n在传统的编程模式中&…

1、IoC\nIoC(Inversion of Control,控制反转)是一种软件设计思想,它的核心思想是将对象之间的依赖关系交给容器来管理,从而降低对象之间的耦合度,提高代码的灵活性和可维护性。\n\n在传统的编程模式中,一个对象需要依赖另一个对象时,通常是通过直接创建和管理这个对象来实现的。但是,随着软件系统的不断变化和扩展,这种硬编码方式会使得系统变得难以维护和扩展,因为对象之间的耦合度太高了。而 IoC 的思想则是将这种对象之间的依赖关系反转过来,由容器来管理和注入依赖关系,从而实现对象之间的解耦。\n\n在实现 IoC 的过程中,通常使用依赖注入(Dependency Injection,DI)的方式来管理对象之间的依赖关系。依赖注入有三种实现方式:\n\n构造函数注入:通过构造函数传递依赖对象的实例;\nSetter 方法注入:通过 Setter 方法传递依赖对象的实例;\n接口注入:通过接口实现注入依赖对象的实例。\n\n1\n2\n3\n在 Spring 框架中,依赖注入是通过配置 Bean 的定义和属性来实现的。Spring 容器会自动读取配置文件,将 Bean 定义和属性信息装载到容器中,并根据依赖关系自动注入依赖对象的实例。这样就可以实现对象之间的松耦合,从而提高代码的灵活性和可维护性。\n\n以下是一个简单的代码示例:\n首先,在 src/main/java 目录下创建一个名为 com.example.demo 的包。在该包下创建一个名为 MyApplication 的主应用程序类:\n\npackage com.example.demo;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.context.ApplicationContext;\n\n@SpringBootApplication\npublic class MyApplication {\n\n public static void main(String[] args) {\n ApplicationContext context = SpringApplication.run(MyApplication.class, args);\n\n // 从 Spring 容器中获取名为 “myBean” 的 bean\n MyBean myBean = (MyBean) context.getBean(“myBean”);\n myBean.sayHello();\n }\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n在该类中,使用了 @SpringBootApplication 注解,它组合了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解,用于开启 Spring Boot 应用程序的自动配置和组件扫描功能。\n\n接下来,在同一包下创建一个名为 MyBean 的类:\n\npackage com.example.demo;\n\nimport org.springframework.stereotype.Component;\n\n@Component(“myBean”)\npublic class MyBean {\n\n public void sayHello() {\n System.out.println(“Hello, World!”);\n }\n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n在该类中,我们使用了 @Component 注解,将该类声明为一个组件,并使用 “myBean” 作为该组件在 Spring 容器中的名称。\n\n现在,我们可以运行 MyApplication 类,并从 Spring 容器中获取 MyBean 实例,并调用其 sayHello() 方法输出 “Hello, World!”。\n\n2、DI\n依赖注入(Dependency Injection)是一种设计模式,它用于解决对象之间的依赖关系,特别是在面向对象编程中。该模式通过将依赖关系的创建和管理从客户端代码中解耦出来,从而使代码更加灵活、可维护和可测试。\n\n在依赖注入模式中,对象不是直接创建或获取它们所依赖的对象,而是将它们的依赖关系交给外部的系统或组件来处理。这些依赖关系通常通过构造函数参数、属性或方法参数来传递,或者通过专门的容器来管理。\n\n依赖注入可以有三种方式实现:\n\n构造函数注入(Constructor Injection):在对象创建时,通过构造函数参数将依赖关系传递给对象。\n\n属性注入(Property Injection):通过公开的属性或方法,将依赖关系注入到对象中。\n\n接口注入(Interface Injection):定义一个接口,通过实现这个接口,来将依赖关系注入到对象中。\n1\n2\n3\n4\n5\n依赖注入的好处在于,它可以帮助我们实现代码的解耦和可测试性。通过将对象之间的依赖关系交给外部来管理,我们可以更轻松地对代码进行单元测试,并且在未来对代码进行重构时,也可以更轻松地修改依赖关系。\n\n以下是一个简单的示例代码:\n假设我们有一个简单的服务类,名为MyService,其中有一个名为doSomething()的方法:\n\npublic class MyService {\n \n public void doSomething() {\n System.out.println(“Doing something…”);\n }\n}\n1\n2\n3\n4\n5\n6\n现在我们想在另一个类中使用MyService类,我们可以使用Spring Boot的依赖注入功能将其注入到另一个类中。\n\n首先,我们需要在MyService类上添加@Component注解,以将其标记为一个组件,以便Spring Boot可以自动扫描并创建该类的实例:\n\n@Component\npublic class MyService {\n \n public void doSomething() {\n System.out.println(“Doing something…”);\n }\n \n}\n1\n2\n3\n4\n5\n6\n7\n8\n接下来,在我们要使用MyService类的类中,我们可以使用@Autowired注解来注入MyService类的实例:\n\n@Service\npublic class MyOtherService {\n \n @Autowired\n private MyService myService;\n \n public void doSomethingElse() {\n \t// do A\n myService.doSomething();\n // do B\n }\n \n}\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n在上面的示例中,我们在MyOtherService类中使用了@Autowired注解来注入MyService类的实例。然后,在doSomethingElse()方法中,我们使用myService实例调用了MyService类中的doSomething()方法。\n\n这样,我们就可以使用Spring Boot的依赖注入功能轻松地管理我们的类之间的依赖关系。\n\n3、AOP\nAOP(面向切面编程)是一种面向对象编程的技术,它允许在程序运行时动态地添加横向关注点到应用程序中。如安全性、日志记录和事务处理等,从应用程序的核心业务逻辑中抽象出来,以便在多个应用程序组件中共享和重用。\n\nAOP的核心是切面(Aspect),切面定义了一系列与横向关注点相关的通知(Advice),通知则是要在横向关注点发生的特定点执行的代码。在Spring Boot中,您可以使用注释或XML配置来定义切面和通知,并通过Spring AOP来织入切面和通知。\n\n有五种类型的通知:\n前置通知(Before advice):在目标方法执行之前执行通知代码。\n后置通知(After advice):在目标方法执行之后(无论方法是否发生异常)执行通知代码。\n返回通知(After returning advice):在目标方法执行之后(方法正常返回时)执行通知代码。\n异常通知(After throwing advice):在目标方法抛出异常时执行通知代码。\n环绕通知(Around advice):在目标方法执行前后都可以执行通知代码。\n1\n2\n3\n4\n5\n以下是使用Spring Boot AOP的基本步骤:\n定义切面类,可以使用@Aspect注释。\n在切面类中定义通知方法,可以使用@Before、@After或@Around等注释。\n在通知方法中执行所需的操作,例如记录日志或验证用户。\n在需要应用切面的类中注入切面,可以使用@Autowired注释。\n下面是一个简单的示例,展示如何使用Spring Boot AOP记录方法调用时间:\n\n定义一个切面类,可以使用@Aspect注释。\n\n\nimport org.apache.commons.lang3.time.StopWatch;\nimport org.aspectj.lang.ProceedingJoinPoint;\nimport org.aspectj.lang.annotation.;\nimport org.springframework.stereotype.Component;\n\n/**\n * 0、务必在 Spring Boot 启动类上面 包扫描此切面\n * 1、放具体的接口或者具体的接口实现类都是可以的,效果一样\n * execution( com.lfsun.api.service.hello.HelloService.(…))\n * execution( com.lfsun.service.main.HelloServiceImpl.(…))\n \n \n * 2、针对某一包下所有类\n * 可以 execution( com.lfsun.service.main…(…))\n * 我这里以具体的实现类为例,达到的效果都是一样的\n \n * 3、结果\n * 执行 MyAspect 切面的环绕通知(前).\n * 执行 MyAspect 切面的前置通知 .\n * 执行 MyAspect 切面的返回通知. 结果是: hello world 666!\n * 执行 MyAspect 切面的后置通知.\n * 执行 MyAspect 切面的环绕通知(后). 结果是: hello world 666!\n * @author Administrator\n /\n@Aspect\n@Component\npublic class MyAspect {\n\n // 前置通知\n //@Before("execution( com.lfsun.service.main.HelloServiceImpl.(…))")\n //@Before("execution( com.lfsun.api.service.hello.HelloService.(…))")\n @Before("execution( com.lfsun.service.main…(…))")\n public void beforeAdvice() {\n System.out.println(“执行 MyAspect 切面的前置通知 .”);\n }\n\n // 后置通知\n //@After("execution( com.lfsun.service.main.HelloServiceImpl.(…))")\n //@After("execution( com.lfsun.api.service.hello.HelloService.(…))")\n @After("execution( com.lfsun.service.main…(…))")\n public void afterAdvice() {\n System.out.println(“执行 MyAspect 切面的后置通知.”);\n }\n\n // 返回通知\n //@AfterReturning(pointcut = "execution( com.lfsun.service.main.HelloServiceImpl.(…))", returning = “result”)\n //@AfterReturning(pointcut = "execution( com.lfsun.api.service.hello.HelloService.(…))", returning = “result”)\n @AfterReturning(pointcut = "execution( com.lfsun.service.main…(…))", returning = “result”)\n public void afterReturningAdvice(Object result) {\n System.out.println("执行 MyAspect 切面的返回通知. 结果是: " + result);\n }\n\n // 异常通知\n //@AfterThrowing(pointcut = "execution( com.lfsun.service.main.HelloServiceImpl.(…))", throwing = “exception”)\n //@AfterThrowing(pointcut = "execution( com.lfsun.api.service.hello.HelloService.(…))", throwing = “exception”)\n @AfterThrowing(pointcut = "execution( com.lfsun.service.main…(…))", throwing = “exception”)\n public void afterThrowingAdvice(Exception exception) {\n System.out.println("执行 MyAspect 切面的抛出异常通知. 异常是: " + exception);\n }\n\n // 环绕通知\n //@Around("execution( com.lfsun.service.main.HelloServiceImpl.(…))")\n //@Around("execution( com.lfsun.api.service.hello.HelloService.(…))")\n @Around("execution( com.lfsun.service.main…*(…))")\n public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {\n System.out.println(“执行 MyAspect 切面的环绕通知(前).”);\n StopWatch stopWatch = new StopWatch();\n stopWatch.start();\n\n Object result = joinPoint.proceed();\n System.out.println(String.format(“执行 MyAspect 切面的环绕通知(后). 结果是: {%s},执行时间:{%d} ms”, result, stopWatch.getTime()));\n return result;\n }\n}\n

http://www.tj-hxxt.cn/news/13577.html

相关文章:

  • 上海新闻最新消息广州网页seo排名
  • 受欢迎的免费网站建设长沙网站包年优化
  • 新乡做网站的全渠道营销案例
  • 互联网与网站有哪些人民日报新闻消息
  • 公司注册资金实缴可以取出来吗重庆百度快照优化
  • 网站建设国际深圳广东疫情防控措施
  • 乌兰浩特市建设局网站国家免费技能培训有哪些
  • 如何请人做网站百度seo自然优化
  • 广州专业做外贸网站百度贴吧怎么做推广
  • 常平哪里有招计算机网站开发的保定网站推广公司
  • 代理注册公司代理费多少钱来客seo
  • 公司装修开工仪式吉利话seo优化收费
  • 网站地址查询最新区域名网络广告营销有哪些
  • 闵行区属于浦东还是浦西青岛seo整站优化
  • 北京天仪建设工程质量检测所网站6百度秒收录
  • 专业的网站开发服务商seo搜索引擎优化书籍
  • wordpress主题轉中文新手怎么入行seo
  • 苏州好的做网站的公司网站怎么制作免费的
  • 淮安市网站建设app营销策划方案
  • 美食网站建设需求分析怎么做营销推广方案
  • 一元购网站怎么做秦洁婷seo博客
  • 做设计的都用那些网站怎样做电商 入手
  • 济南 域名注册 网站建设百度应用商店app下载安装
  • seo网站诊断优化流程怎么进行网络推广
  • 上海自适应网站制作百度网站首页提交入口
  • 快速的企业微信开发整站seo排名费用价格
  • 山东省威海市文登区建设局网站广告推广计划
  • 做果蔬零售的网站广告公司推广
  • 徐州做网站的公司有哪些seo外包杭州
  • dede推荐评级网站模版上海高端seo公司