목차
常见的元注解
元素的类型
支持的元素类型
例子
공통 메타 주석
요소 유형
지원되는 요소 유형
Java내장 주석
特别的注解
利用反射获取注解
注解
被注解的元素
获取注解
Spring中使用自定义注解
需求
最终效果
具体做法
总结
Java java지도 시간 Java 주석의 정의 및 사용 소개(코드 예제)

Java 주석의 정의 및 사용 소개(코드 예제)

Feb 21, 2019 pm 02:41 PM
java spring 주석

이 글은 Java 주석(코드 예제)의 정의와 사용에 대해 설명합니다. 필요한 참고가 될 수 있습니다.

Java 주석은 실제 프로젝트에서 많이 사용되며, 특히 Spring을 사용한 후에는 더욱 그렇습니다.

이 글에서는 Java Annotation의 구문과 Spring에서 Annotation을 사용하는 예를 소개합니다.

주석의 구문

주석의 예

Junit의 @Test 주석을 예로 들어보세요

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    long timeout() default 0L;
}
로그인 후 복사

@Test 주석에 @Target()가 있는 것을 볼 수 있습니다. > 및 @Retention()두 개의 주석.
주석에 주석을 추가하는 이러한 종류의 주석을 메타 주석이라고 합니다.
데이터를 선언하는 데이터, 즉 메타데이터와 같은 의미입니다. @Test注解上有@Target()@Retention()两个注解。
这种注解了注解的注解,称之为元注解
跟声明了数据的数据,称为元数据是一种意思。

之后的注解的格式是

修饰符 @interface 注解名 {   
    注解元素的声明1 
    注解元素的声明2   
}
로그인 후 복사

注解的元素声明有两种形式

type elementName();
type elementName() default value;  // 带默认值
로그인 후 복사

常见的元注解

@Target注解

@Target注解用于限制注解能在哪些项上应用,没有加@Target的注解可以应用于任何项上。

java.lang.annotation.ElementType类中可以看到所有@Target接受的项

  • TYPE 在【类、接口、注解】上使用

  • FIELD 在【字段、枚举常量】上使用

  • METHOD 在【方法】上使用

  • PARAMETER 在【参数】上使用

  • CONSTRUCTOR 在【构造器】上使用

  • LOCAL_VARIABLE 在【局部变量】上使用

  • ANNOTATION_TYPE 在【注解】上使用

  • PACKAGE 在【包】上使用

  • TYPE_PARAMETER 在【类型参数】上使用 Java 1.8 引入

  • TYPE_USE 在【任何声明类型的地方】上使用 Java 1.8 引入

@Test注解只允许在方法上使用。

@Target(ElementType.METHOD)
public @interface Test { ... }
로그인 후 복사

如果要支持多项,则传入多个值。

@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnnotation { ... }
로그인 후 복사

此外元注解也是注解,也符合注解的语法,如@Target注解。
@Target(ElementType.ANNOTATION_TYPE)表明@Target注解只能使用在注解上。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}
로그인 후 복사

@Retention注解

@Retention指定注解应该保留多长时间,默认是RetentionPolicy.CLASS
java.lang.annotation.RetentionPolicy可看到所有的项

  • SOURCE 不包含在类文件中

  • CLASS 包含在类文件中,不载入虚拟机

  • RUNTIME  包含在类文件中,由虚拟机载入,可以用反射API获取

@Test注解会载入到虚拟机,可以通过代码获取

@Retention(RetentionPolicy.RUNTIME)
public @interface Test { ... }
로그인 후 복사

@Documented注解

主要用于归档工具识别。被注解的元素能被Javadoc或类似的工具文档化。

@Inherited注解

添加了@Inherited注解的注解,所注解的类的子类也将拥有这个注解

注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyAnnotation { ... }
로그인 후 복사

父类

@MyAnnotation 
class Parent { ... }
로그인 후 복사

子类Child会把加在Parent上的@MyAnnotation继承下来

class Child extends Parent { ... }
로그인 후 복사

@Repeatable注解

Java 1.8 引入的注解,标识注解是可重复使用的。

注解1

public @interface MyAnnotations {   
    MyAnnotation[] value();   
}
로그인 후 복사

注解2

@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {   
    int value();
}
로그인 후 복사

有使用@Repeatable()时的使用

@MyAnnotation(1)
@MyAnnotation(2)
@MyAnnotation(3)
public class MyTest { ... }
로그인 후 복사

没使用@Repeatable()时的使用,@MyAnnotation去掉@Repeatable元注解

@MyAnnotations({
    @MyAnnotation(1), 
    @MyAnnotation(2),
    @MyAnnotation(3)})
public class MyTest { ... }
로그인 후 복사

这个注解还是非常有用的,让我们的代码变得简洁不少,
Spring@ComponentScan注解也用到这个元注解。

元素的类型

支持的元素类型

  • 8种基本数据类型(byteshortcharintlongfloatdoubleboolean

  • String

  • Class

  • enum

  • 注解类型

  • 数组(所有上边类型的数组)

例子

枚举类

public enum Status {
    GOOD,
    BAD
}
로그인 후 복사

注解1

@Target(ElementType.ANNOTATION_TYPE)
public @interface MyAnnotation1 {
    int val();
}
로그인 후 복사

注解2

@Target(ElementType.TYPE)
public @interface MyAnnotation2 {
    
    boolean boo() default false;
    
    Class<?> cla() default Void.class;
    
    Status enu() default Status.GOOD;
    
    MyAnnotation1 anno() default @MyAnnotation1(val = 1);
    
    String[] arr();
    
}
로그인 후 복사

使用时,无默认值的元素必须传值

@MyAnnotation2(
        cla = String.class,
        enu = Status.BAD,
        anno = @MyAnnotation1(val = 2),
        arr = {"a", "b"})
public class MyTest { ... }
로그인 후 복사

Java内置的注解

@Override注解

告诉编译器这个是个覆盖父类的方法。如果父类删除了该方法,则子类会报错。

@Deprecated注解

表示被注解的元素已被弃用。

@SuppressWarnings注解

告诉编译器忽略警告。

@FunctionalInterface注解

Java 1.8 引入的注解。该注释会强制编译器javac

이후의 주석 형식은 🎜
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface MyAnno {   
    String value();   
}
로그인 후 복사
로그인 후 복사
🎜주석이 있는 요소 선언에는 두 가지 형식이 있습니다🎜
@MyAnno("class")
public class MyClass {
    
    @MyAnno("feild")
    private String str;
    
    @MyAnno("method")
    public void method() { }
    
}
로그인 후 복사
로그인 후 복사

공통 메타 주석

@Target 주석

🎜 @Target 주석은 주석이 적용될 수 있는 항목을 제한하는 데 사용됩니다. @Target이 없는 주석은 모든 항목에 적용될 수 있습니다. 🎜🎜java.lang.annotation.ElementType 클래스🎜
  • @Target이 허용하는 모든 항목을 볼 수 있습니다. >🎜TYPE [클래스, 인터페이스, 주석]에 🎜 사용
  • 🎜FIELD [필드, 열거 상수]에 🎜 사용 li>🎜METHOD [Method]에서 🎜
  • 🎜PARAMETER 사용 🎜
  • 🎜CONSTRUCTOR사용 > [생성자]에 🎜
  • 🎜LOCAL_VARIABLE 사용 [로컬 변수]에 🎜
  • 🎜 사용 ANNOTATION_TYPE 🎜 사용 [주석]의 li>
  • 🎜PACKAGE 🎜
  • 🎜TYPE_PARAMETER 사용 Java 1.8을 사용하여 🎜
  • 🎜 소개 TYPE_USE Java 1.8을 사용하여 🎜
  • 🎜@Test 주석을 도입하면 메소드에만 사용할 수 있습니다. 🎜
public class Test {
    
    public static void main(String[] args) throws Exception {
    
        MyClass obj = new MyClass();
        Class<?> clazz = obj.getClass();
        
        // 获取对象上的注解
        MyAnno anno = clazz.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
        
        // 获取属性上的注解
        Field field = clazz.getDeclaredField("str");
        anno = field.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
        
        // 获取方法上的注解
        Method method = clazz.getMethod("method");
        anno = method.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
    }
    
}
로그인 후 복사
로그인 후 복사
🎜여러 항목을 지원하려면 여러 값을 전달하세요. 🎜
@CmdMapping(Cmd.LOGIN)
public class LoginHandler implements ICmdHandler {
    @Override
    public void handle() {
        System.out.println("handle login request");
    }
}

@CmdMapping(Cmd.LOGOUT)
public class LogoutHandler implements ICmdHandler {
    @Override
    public void handle() {
        System.out.println("handle logout request");
    }
}
로그인 후 복사
로그인 후 복사
🎜또한 메타 주석도 주석이며 @Target 주석과 같은 주석 구문을 따릅니다.
@Target(ElementType.ANNOTATION_TYPE)@Target 주석이 주석에만 사용될 수 있음을 나타냅니다. 🎜
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface CmdMapping {
    int value();   
}
로그인 후 복사
로그인 후 복사

@RetentionAnnotation

🎜@Retention은 주석을 보관해야 하는 기간을 지정합니다. 기본값은 RetentionPolicy.CLASS입니다. >.
java.lang.annotation.RetentionPolicy🎜
  • 🎜SOURCE에서 모든 항목을 볼 수 있습니다. 클래스 파일에 포함됨🎜
  • 🎜CLASS 클래스 파일에 포함됨, 가상 머신에 로드되지 않음🎜
  • 🎜RUNTIME 클래스 파일에 포함되어 있으며 가상 머신에 의해 로드되고 리플렉션 API를 통해 얻을 수 있습니다🎜
🎜@Test 주석이 가상 머신에 로드되고 코드를 통해 얻을 수 있습니다🎜
public interface Cmd {
    int REGISTER = 1;
    int LOGIN    = 2;
    int LOGOUT   = 3;
}
로그인 후 복사
로그인 후 복사

@Documented주석

🎜은 주로 보관 도구 식별에 사용됩니다. 주석이 달린 요소는 Javadoc 또는 유사한 도구를 사용하여 문서화할 수 있습니다. 🎜

@InheritedAnnotation

🎜@Inherited 주석의 주석이 추가되고 주석이 달린 클래스의 하위 클래스에도 이 주석이 있습니다🎜🎜 Annotation🎜
public interface ICmdHandler { 
    void handle();   
}
로그인 후 복사
로그인 후 복사
🎜Parent class🎜
@Component
public class HandlerDispatcherServlet implements 
    InitializingBean, ApplicationContextAware {

    private ApplicationContext context;

    private Map<Integer, ICmdHandler> handlers = new HashMap<>();
    
    public void handle(int cmd) {
        handlers.get(cmd).handle();
    }
    
    public void afterPropertiesSet() {
        
        String[] beanNames = this.context.getBeanNamesForType(Object.class);

        for (String beanName : beanNames) {
            
            if (ScopedProxyUtils.isScopedTarget(beanName)) {
                continue;
            }
            
            Class<?> beanType = this.context.getType(beanName);
            
            if (beanType != null) {
                
                CmdMapping annotation = AnnotatedElementUtils.findMergedAnnotation(
                        beanType, CmdMapping.class);
                
                if(annotation != null) {
                    handlers.put(annotation.value(), (ICmdHandler) context.getBean(beanType));
                }
            }
        }
        
    }

    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {   
        this.context = applicationContext;
    }

}
로그인 후 복사
로그인 후 복사
🎜 하위 클래스 ChildParent🎜
@ComponentScan("pers.custom.annotation")
public class Main {

    public static void main(String[] args) {
        
        AnnotationConfigApplicationContext context 
            = new AnnotationConfigApplicationContext(Main.class);
            
        HandlerDispatcherServlet servlet = context.getBean(HandlerDispatcherServlet.class);
        
        servlet.handle(Cmd.REGISTER);
        servlet.handle(Cmd.LOGIN);
        servlet.handle(Cmd.LOGOUT);

        context.close();
    }
}
로그인 후 복사
로그인 후 복사

에 추가된 <code>@MyAnnotation를 상속합니다 @ 반복 가능주석

🎜Java 1.8에 도입된 주석은 해당 주석이 재사용 가능함을 나타냅니다. 🎜🎜Annotation 1🎜rrreee🎜Annotation 2🎜rrreee🎜@Repeatable()을 사용할 때 사용 🎜rrreee🎜@Repeatable()을 사용하지 않을 때 사용, @MyAnnotation@Repeatable 메타 주석을 제거하세요🎜rrreee🎜이 주석은 여전히 ​​매우 유용하여 코드를 훨씬 단순하게 만들어줍니다.
Spring@ComponentScan 주석도 이 메타 주석을 사용합니다. 🎜

요소 유형

지원되는 요소 유형

  • 🎜8가지 기본 데이터 유형(byte code> , <code>short, char, int, long, float, double , 부울)🎜
  • 🎜문자열🎜
  • 🎜클래스 🎜
  • 🎜enum🎜
  • 🎜주석 유형🎜
  • 🎜Array(위의 모든 유형의 배열)🎜
  • ul>

    🎜Enumeration 클래스🎜rrreee🎜Annotation 1🎜rrreee🎜Annotation 2🎜rrreee🎜사용 시 기본값이 없는 요소는 값을 전달해야 합니다🎜rrreee

    Java내장 주석

    @Override주석

    🎜은 이것이 상위 클래스를 재정의하는 메서드임을 컴파일러에 알려줍니다. 상위 클래스가 이 메서드를 삭제하면 하위 클래스에서 오류를 보고합니다. 🎜

    @Deprecated 주석

    🎜은 주석이 달린 요소가 더 이상 사용되지 않음을 나타냅니다. 🎜

    @SuppressWarnings 주석

    🎜은 컴파일러에게 경고를 무시하도록 지시합니다. 🎜

    @FunctionalInterface주석

    🎜Java 1.8에 도입된 주석입니다. 이 주석은 컴파일러 javac가 인터페이스가 기능적 인터페이스 표준을 준수하는지 확인하도록 강제합니다. 🎜

    特别的注解

    有两种比较特别的注解

    • 标记注解 : 注解中没有任何元素,使用时直接是 @XxxAnnotation, 不需要加括号

    • 单值注解 : 注解只有一个元素,且名字为value,使用时直接传值,不需要指定元素名@XxxAnnotation(100)

    利用反射获取注解

    JavaAnnotatedElement接口中有getAnnotation()等获取注解的方法。
    MethodFieldClassPackage等类均实现了这个接口,因此均有获取注解的能力。

    例子

    注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface MyAnno {   
    String value();   
}
로그인 후 복사
로그인 후 복사

被注解的元素

@MyAnno("class")
public class MyClass {
    
    @MyAnno("feild")
    private String str;
    
    @MyAnno("method")
    public void method() { }
    
}
로그인 후 복사
로그인 후 복사

获取注解

public class Test {
    
    public static void main(String[] args) throws Exception {
    
        MyClass obj = new MyClass();
        Class<?> clazz = obj.getClass();
        
        // 获取对象上的注解
        MyAnno anno = clazz.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
        
        // 获取属性上的注解
        Field field = clazz.getDeclaredField("str");
        anno = field.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
        
        // 获取方法上的注解
        Method method = clazz.getMethod("method");
        anno = method.getAnnotation(MyAnno.class);
        System.out.println(anno.value());
    }
    
}
로그인 후 복사
로그인 후 복사

Spring中使用自定义注解

注解本身不会有任何的作用,需要有其他代码或工具的支持才有用。

需求

设想现有这样的需求,程序需要接收不同的命令CMD
然后根据命令调用不同的处理类Handler
很容易就会想到用Map来存储命令和处理类的映射关系。

由于项目可能是多个成员共同开发,不同成员实现各自负责的命令的处理逻辑。
因此希望开发成员只关注Handler的实现,不需要主动去Map中注册CMDHandler的映射。

最终效果

最终希望看到效果是这样的

@CmdMapping(Cmd.LOGIN)
public class LoginHandler implements ICmdHandler {
    @Override
    public void handle() {
        System.out.println("handle login request");
    }
}

@CmdMapping(Cmd.LOGOUT)
public class LogoutHandler implements ICmdHandler {
    @Override
    public void handle() {
        System.out.println("handle logout request");
    }
}
로그인 후 복사
로그인 후 복사

开发人员增加自己的Handler,只需要创建新的类并注上@CmdMapping(Cmd.Xxx)即可。

具体做法

具体的实现是使用Spring和一个自定义的注解
定义@CmdMapping注解

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface CmdMapping {
    int value();   
}
로그인 후 복사
로그인 후 복사

@CmdMapping中有一个int类型的元素value,用于指定CMD。这里做成一个单值注解。
这里还加了Spring@Component注解,因此注解了@CmdMapping的类也会被Spring创建实例。

然后是CMD接口,存储命令。

public interface Cmd {
    int REGISTER = 1;
    int LOGIN    = 2;
    int LOGOUT   = 3;
}
로그인 후 복사
로그인 후 복사

之后是处理类接口,现实情况接口会复杂得多,这里简化了。

public interface ICmdHandler { 
    void handle();   
}
로그인 후 복사
로그인 후 복사

上边说过,注解本身是不起作用的,需要其他的支持。下边就是让注解生效的部分了。
使用时调用handle()方法即可。

@Component
public class HandlerDispatcherServlet implements 
    InitializingBean, ApplicationContextAware {

    private ApplicationContext context;

    private Map<Integer, ICmdHandler> handlers = new HashMap<>();
    
    public void handle(int cmd) {
        handlers.get(cmd).handle();
    }
    
    public void afterPropertiesSet() {
        
        String[] beanNames = this.context.getBeanNamesForType(Object.class);

        for (String beanName : beanNames) {
            
            if (ScopedProxyUtils.isScopedTarget(beanName)) {
                continue;
            }
            
            Class<?> beanType = this.context.getType(beanName);
            
            if (beanType != null) {
                
                CmdMapping annotation = AnnotatedElementUtils.findMergedAnnotation(
                        beanType, CmdMapping.class);
                
                if(annotation != null) {
                    handlers.put(annotation.value(), (ICmdHandler) context.getBean(beanType));
                }
            }
        }
        
    }

    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {   
        this.context = applicationContext;
    }

}
로그인 후 복사
로그인 후 복사

主要工作都是Spring做,这里只是将实例化后的对象putMap中。

测试代码

@ComponentScan("pers.custom.annotation")
public class Main {

    public static void main(String[] args) {
        
        AnnotationConfigApplicationContext context 
            = new AnnotationConfigApplicationContext(Main.class);
            
        HandlerDispatcherServlet servlet = context.getBean(HandlerDispatcherServlet.class);
        
        servlet.handle(Cmd.REGISTER);
        servlet.handle(Cmd.LOGIN);
        servlet.handle(Cmd.LOGOUT);

        context.close();
    }
}
로그인 후 복사
로그인 후 복사

> 完整项目

总结

可以看到使用注解能够写出很灵活的代码,注解也特别适合做为使用框架的一种方式。
所以学会使用注解还是很有用的,毕竟这对于上手框架或实现自己的框架都是非常重要的知识。

위 내용은 Java 주석의 정의 및 사용 소개(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 날짜까지의 타임스탬프 Java의 날짜까지의 타임스탬프 Aug 30, 2024 pm 04:28 PM

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐의 양을 찾기위한 Java 프로그램 캡슐의 양을 찾기위한 Java 프로그램 Feb 07, 2025 am 11:37 AM

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Tool Suite에서 첫 번째 Spring Boot 응용 프로그램을 실행하는 방법은 무엇입니까? Spring Tool Suite에서 첫 번째 Spring Boot 응용 프로그램을 실행하는 방법은 무엇입니까? Feb 07, 2025 pm 12:11 PM

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.

See all articles