1、将上节课的HelloWorld项目用注解的方式实现
- Student类采用@Component注解
package com.spring.annotation;
import org.springframework.stereotype.Component;
/**
* 采用注解开发bean
* @Component 用于类级别注解,标注本类为一个可被Spring容器托管的bean
*/
@Component
public class Hello {
public String getHello(){
return "Hello World";
}
}
- HelloWorldApp类,采用@ComponentScan注解
package com.spring.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
//用于寻找用@componnent注解标注的bean
@ComponentScan
public class HelloApp {
public static void main(String[] args) {
// 1 通过注解创建上下文对象
ApplicationContext context=new AnnotationConfigApplicationContext(HelloApp.class);
// 2 读取bean
Hello hello=context.getBean(Hello.class);
// 3 运行
System.out.println(hello.getHello());
}
}
-
运行结果
运行结果
2、Student和Phone的例子用注解的方法实现
- Lombok插件的使用
-
1.Settings->plugins,搜索Lombok,安装,重启IDEA
settings
搜索并安装 - 注:图片中此前已安装过lombok,所以显示有所不同,安装完需重启idea
- 2.添加依赖
-
<!--lombox依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
- 版本号一般是自动生成的,如果不正确视情况修改
- Phone类
package com.spring.annotation;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//采用注解和Lombok开发的Phone类
@Component
@Data
public class Phone {
@Value("荣耀v20")
private String brand;
@Value("2999.0")
private double price;
}
- Student类
package com.spring.annotation;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class Student {
@Value("Tom")
private String name;
@Value("20")
private double age;
// 引用类型,通过@Autowired注入Phone的bean
@Autowired
private Phone phone;
}
- StudentApp类
package com.spring.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
public class StudentApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(StudentApp.class);
Student student = context.getBean(Student.class);
System.out.println(student);
}
}
- 添加日志文件log4j.properties
##日志输出的级别,以及配置记录方案
log4j.rootLogger=info,stdout,file
###log4j.rootLogger=info, stdout,file
##设置日志记录到控制台的方式
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
##设置日志记录到文件的方式
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=logs/my_log.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
-
运行结果
运行结果
3、深入学习Lombok
Lombok原理分析与功能实现
常用的注解:
-
@Data:注解在类上,将类提供的所有属性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法
-
@Setter:注解在类上,为所有属性添加set方法、注解在属性上为该属性提供set方法
-
@Getter:注解在类上,为所有的属性添加get方法、注解在属性上为该属性提供get方法
-
@NotNull:在参数中使用时,如果调用时传了null值,就会抛出空指针异常
-
@Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定
-
@Log作用于类,创建一个log属性
-
@Builder:使用builder模式创建对象
-
@NoArgsConstructor:创建一个无参构造函数
-
@AllArgsConstructor:创建一个全参构造函数
-
@ToStirng:创建一个toString方法
-
@Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。
-
(链式设置属性举例:
- image
-
@RequiredArgsConstructor:创建对象
-
@UtilityClass:工具类
-
@ExtensionMethod:设置父类
-
@FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。
-
@Cleanup: 关闭流、连接点。
-
@EqualsAndHashCode:重写equals和hashcode方法。
-
@toString:创建toString方法
更多的请参见:https://projectlombok.org/features/index.html
网友评论