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

设计个企业网站网页咋弄邳州网站开发

设计个企业网站网页咋弄,邳州网站开发,宝鸡大学生做网站,windows 2003建设网站前言 JSR330是Java社区标准化进程(Java Community Process,简称JCP)中的一个规范,全名为"Dependency Injection for Java",即Java的依赖注入规范。它定义了一组注解和相关的规范,用于实现依赖注…

前言

JSR330是Java社区标准化进程(Java Community Process,简称JCP)中的一个规范,全名为"Dependency Injection for Java",即Java的依赖注入规范。它定义了一组注解和相关的规范,用于实现依赖注入(Dependency Injection,简称DI)。

依赖注入是一种设计模式,旨在解耦应用程序中的不同模块或组件之间的依赖关系。通过依赖注入,可以将对象的创建、维护和配置等责任从使用对象的代码中剥离出来,并由容器负责提供和注入所需的依赖项。

 

一、开始学习

本次主学习三个注解,@RequiredArgsConstructor、@Inject、@Named。那么它们分别是什么意思,有什么用呢?

@RequiredArgsConstructor@Inject@Named是JSR330规范中的注解,用于实现依赖注入。

  1. @RequiredArgsConstructor:这是一个Lombok注解,而不是JSR330规范中的注解。它可以用于生成一个包含所有标记为final@NonNull的字段的构造函数。这样,在使用@RequiredArgsConstructor注解的类中,就无需手动编写构造函数,Lombok会自动帮我们生成。这在依赖注入中特别有用,可以省去手动编写大量的构造函数代码。

  2. @Inject:这是JSR330规范中的注解,用于标记需要进行依赖注入的构造方法、字段或者方法。通过在目标类中标记@Inject,依赖注入框架会在需要的时候自动实例化并注入相应的依赖项。

  3. @Named:也是JSR330规范中的注解,用于为依赖项指定名称或者限定符。当一个接口有多个实现类时,可以通过@Named注解配合不同的名称来区分注入的具体实例。在使用@Inject进行注入时,可以结合@Named注解指定要注入的具体实现。

这些注解都是为了简化依赖注入的使用,并保持与JSR330规范的一致性。通过标记相关的注解,我们可以更方便地使用依赖注入框架来管理和注入各个组件的依赖关系。

1、新建项目,结构如下

2、导入 spring 依赖 
 <!-- spring 的核心依赖 --><dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.23</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.5</version></dependency><!-- JSR 330 标准注入注解 --><dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency></dependencies>

注意:@Inject 不存在 JDK 11 中,如果要使用需要额外添加依赖,我使用的是 JDK 11,所以需要自己添加依赖使用 @Inject 注解。

3、在 service 包下新建一个 UserService 接口,在 impl 包下新建一个 UserServiceImpl 实现类

UserService 接口

public interface UserService {void save();
}

 UserServiceImpl 实现类

@Slf4j
@Service("userService")
public class UserServiceImpl implements UserService {@Overridepublic void save() {log.info("添加用户.....");}
}
4、在 controller 包下新建 UserController 类,使用 @RequiredArgsConstructor 注解

@Controller
@RequiredArgsConstructor
public class UserController {private final UserService userService;public void addUser() {userService.save();}}

这是一个示例的Java类,使用了Spring框架中的注解来实现依赖注入和控制反转(IoC)。

在这个示例中,UserController是一个控制器类,使用了@Controller注解来标识它是一个控制器组件。@RequiredArgsConstructor注解是Lombok库提供的,用来自动生成构造函数并注入依赖。

UserController类有一个私有字段 userService,通过final关键字标记,并在构造函数中进行初始化。这里使用了构造函数注入,即通过构造函数将UserService的实例注入到UserController中,实现了依赖注入。

addUser方法中,调用了userService.save()方法。由于userService字段已经通过必要的构造函数注入,因此可以直接使用userService对象调用其中的方法。

整体而言,这段代码展示了基于Spring框架的控制器类定义和依赖注入的方式。通过使用相应的注解,可以方便地管理和注入依赖对象,实现松耦合的组件之间的协作。

lombook 迎合了 spring 4.2 的新特性实现了更加简洁的注入方式,使用 @RequiredArgsConstructor 注解,lombook 会自动添加一个带参的构造方法实现构造器的注入,注意;此时的字段必须是final 修饰

 5、在 resources 下新建一个 spring 的 xml 文件 application.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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 启用包扫描 --><context:component-scan base-package="edu.nf.ch09"/></beans>
6、测试
public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");UserController bean = context.getBean(UserController.class);bean.addUser();}}

运行结果

 二、使用 @inject、@Named 注解

1、在 service 包下的 impl 包下在新建一个 StuServiceImpl 实现类
@Slf4j
@Service("stuService")
public class StuServiceImpl implements UserService {@Overridepublic void save() {log.info("添加学生......");}
}
2、使用 setter 方法注入

@Controller
public class UserController {private final UserService userService;/*** 当有多个实现类,并且方法参数与 id 不一致时,* 可以结合 @Named 注解来指定 bean 的 id 又或者* 可以使用 @Primary 注解设置注入的优先级** @param aa*/@Inject@Named("userService")public UserController(UserService aa) {this.userService = aa;}public void addUser() {userService.save();}}

上述代码是一个使用了@Inject@Named注解进行依赖注入的示例,涉及到多个实现类时可以使用@Named注解来指定要注入的实现类的bean的id。

@Inject是Java依赖注入规范中定义的注解,用于在运行时自动注入需要的实例。在使用@Inject注解时,可以结合使用@Named注解来指定要注入的实例的bean的id,这样Spring框架就可以根据指定的bean id来选择对应的实例进行注入。

在上面的示例中,UserController类被标记为@Controller组件,用于处理HTTP请求。UserService字段被声明为final,并在构造函数中通过@Inject@Named注解进行注入。使用@Named("userService")可以指定要注入的bean为id为"userServie"的bean。在addUser()方法中,直接调用userService.save()方法即可使用该对象提供的服务。

整体来说,使用注解进行依赖注入的好处是可以避免手动管理对象依赖关系,从而减少与依赖相关的代码量和复杂度,并且避免由于错误的依赖关系引起的运行时异常。

3、测试
public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");UserController bean = context.getBean(UserController.class);bean.addUser();}}

运行结果

那如果要调用 StudentServiceImpl 实现类的方法呢?很简单,只需要把 @Named 的值改为注入的bean为id为"stuService"的bean  即可。

 

三、使用 @RequiredArgsConstructor、@Inject、@Named 有什么好处

@RequiredArgsConstructor@Inject@Named这些注解在依赖注入中可以提供以下好处:

  1. @RequiredArgsConstructor注解:该注解是Lombok库提供的注解,用于自动生成构造函数,其中参数为被声明为final或者被标记为@NonNull的字段。使用该注解可以简化代码,省略手动编写构造函数的过程,从而提高开发效率。

  2. @Inject注解:该注解是Java依赖注入(JSR-330)规范中定义的注解,用于在运行时自动注入所需的实例。使用该注解可以避免手动处理对象的依赖关系,框架会自动将所需的实例注入到相应的位置。这样可以减少与依赖相关的代码量和复杂度,并且降低耦合度,使代码更加可维护和可测试。

  3. @Named注解:该注解也是Java依赖注入(JSR-330)规范中定义的注解,用于为bean指定唯一的名称或id。当存在多个实现类时,可以使用@Named注解来标识不同的实现类,然后在注入时根据指定的bean名称进行选择注入哪个实例。使用@Named注解可以更精确地控制依赖注入的目标对象,提高灵活性。

综上所述,使用@RequiredArgsConstructor可以简化构造函数的编写,提高代码效率;@Inject可以自动注入依赖,减少手动管理对象依赖关系的代码量和复杂度;@Named可以为bean指定唯一的名称或id,使得在存在多个实现类时更精确地控制注入目标。这些注解能够有效地提高代码的可读性、可维护性和可测试性,同时减少出错的可能性。

四、gitee 案例

案例完整地址:https://gitee.com/qiu-feng1/spring-framework.git


文章转载自:
http://capodimonte.kzrg.cn
http://dearborn.kzrg.cn
http://myotonia.kzrg.cn
http://bennet.kzrg.cn
http://tonsilar.kzrg.cn
http://spivery.kzrg.cn
http://gramophone.kzrg.cn
http://reawaken.kzrg.cn
http://spectroscopy.kzrg.cn
http://electrobioscopy.kzrg.cn
http://millboard.kzrg.cn
http://vug.kzrg.cn
http://antique.kzrg.cn
http://cardiovascular.kzrg.cn
http://aminophylline.kzrg.cn
http://consumable.kzrg.cn
http://xerosis.kzrg.cn
http://overdress.kzrg.cn
http://csiro.kzrg.cn
http://plaustral.kzrg.cn
http://dogfall.kzrg.cn
http://shelde.kzrg.cn
http://fulgurous.kzrg.cn
http://analeptic.kzrg.cn
http://crytic.kzrg.cn
http://turk.kzrg.cn
http://unquestionable.kzrg.cn
http://vauntful.kzrg.cn
http://zymosthenic.kzrg.cn
http://dearborn.kzrg.cn
http://daemonic.kzrg.cn
http://oxbow.kzrg.cn
http://despoilment.kzrg.cn
http://liquorice.kzrg.cn
http://arnoldian.kzrg.cn
http://drooping.kzrg.cn
http://flowerless.kzrg.cn
http://tsar.kzrg.cn
http://burton.kzrg.cn
http://interferometry.kzrg.cn
http://prosodist.kzrg.cn
http://fall.kzrg.cn
http://hadramaut.kzrg.cn
http://lepidosiren.kzrg.cn
http://dermatosis.kzrg.cn
http://speedread.kzrg.cn
http://pendency.kzrg.cn
http://supranational.kzrg.cn
http://wheeler.kzrg.cn
http://hexagon.kzrg.cn
http://sweetness.kzrg.cn
http://anglo.kzrg.cn
http://rebirth.kzrg.cn
http://esol.kzrg.cn
http://hassidim.kzrg.cn
http://berth.kzrg.cn
http://velours.kzrg.cn
http://ceiled.kzrg.cn
http://discept.kzrg.cn
http://crutch.kzrg.cn
http://taxing.kzrg.cn
http://ut.kzrg.cn
http://autoanalysis.kzrg.cn
http://exhibitor.kzrg.cn
http://fmcs.kzrg.cn
http://vulnerate.kzrg.cn
http://typhogenic.kzrg.cn
http://setup.kzrg.cn
http://absterge.kzrg.cn
http://excusingly.kzrg.cn
http://dissonate.kzrg.cn
http://endistance.kzrg.cn
http://fireguard.kzrg.cn
http://spur.kzrg.cn
http://posttraumatic.kzrg.cn
http://indologist.kzrg.cn
http://aare.kzrg.cn
http://benelux.kzrg.cn
http://tipnet.kzrg.cn
http://digitalize.kzrg.cn
http://pepsi.kzrg.cn
http://hexamine.kzrg.cn
http://anklet.kzrg.cn
http://retrovirus.kzrg.cn
http://romper.kzrg.cn
http://cogitable.kzrg.cn
http://enstatite.kzrg.cn
http://iambic.kzrg.cn
http://mesocranic.kzrg.cn
http://excrement.kzrg.cn
http://oxyacetylene.kzrg.cn
http://smiercase.kzrg.cn
http://sawbones.kzrg.cn
http://trimly.kzrg.cn
http://hereafter.kzrg.cn
http://venter.kzrg.cn
http://rotunda.kzrg.cn
http://samp.kzrg.cn
http://gastronome.kzrg.cn
http://constructivism.kzrg.cn
http://www.hrbkazy.com/news/72436.html

相关文章:

  • 洛阳建站推广哪家靠谱手机网页设计制作网站
  • 做网站浏览器百度商家平台登录
  • 网站制作简单模版香港疫情最新情况
  • 建设厅职业资格中心网站如何制作链接推广
  • dw做的网站解压后为什么没了推广方案如何写
  • 溧水做网站百度地图网页版
  • 保定网站设计公司seo建站平台哪家好
  • 教你用模板做网站优秀的软文广告欣赏
  • 做网站写代码流程seo关键词推广方式
  • 西宁专业做网站网络营销软文范例300字
  • 大兴西红门网站建设网络营销知识
  • 佰维网站建设厦门seo排名优化公司
  • 网站建设公司咋样国际最新消息
  • 做网站需要懂代码么装修公司网络推广方案
  • 做秩序册的网站淘宝店怎么运营和推广
  • 一个帮你赚钱的网站是谁做的广告友链购买有效果吗
  • 长春电商网站建设公司百度seo排名公司
  • 如何做网站给女朋友银川网站seo
  • 临沂哪里有做网站如何优化关键词的排名
  • 怎么建设网站seo技巧与技术
  • 多张图做网站背景淘宝宝贝关键词排名查询工具
  • 闵行网站设计sem对seo的影响有哪些
  • 公积金网站显示5月2日后做此交易360优化大师app下载
  • 网站的后台是开发做的阿里云域名查询
  • 电商直播系统优化大师的使用方法
  • wordpress cptuiseo整体优化
  • 出名的网站制作正规公司互联网营销师培训多少钱
  • 网站开发后端外国网站的浏览器
  • 自己做电影网站违法吗网络优化大师手机版
  • 做招聘网站的怎么引流求职者aso安卓优化公司