Spring-注解开发

介绍配置一个类,将这个类交给Spring管理。

例如:以下就相当于

@Component(“book”)

代码:

@Component(“book”)

public class Book {

public int id=1;

public String name=“一心”;

}

测试:

@Test

public void test(){

ApplicationContext context = new ClassPathXmlApplicationContext(“bean1.xml”);

Book book=context.getBean(“book”, Book.class);

System.out.println(book.name);

}

2.2 @Value


作用设置普通属性值

(1)可以不用提供set方法,直接在直接名上添加@value(“值”);

@Component(“book”)

public class Book {

@Value(“2”)

public int id;

@Value(“一心”)

public String name;

}

(2)如果提供了set方法,既可以在set方法上添加@value(“值”),也可以在属性名上添加@value(“值”);

@Component(“book”)

public class Book {

public int id;

@Value(“一心”)

public String name;

@Value(“2”)

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

}

2.3 衍生注解


@Component的三个衍生注解

目的为了更好的进行分层。

作用三者功能类似。

@Controller:web层

@Service:service层

@Repository:dao层

Controller

@Controller(“book”)

public class Book {

@Value(“2”)

public int id;

@Value(“一心”)

public String name;

}

Service

@Service(“book”)

public class Book {

@Value(“2”)

public int id;

@Value(“一心”)

public String name;

}

Repository

@Repository(“book”)

public class Book {

@Value(“2”)

public int id;

@Value(“一心”)

public String name;

}

自动装配:

准备:

实体类Book:

@Component(“book”)

public class Book {

@Value(“2”)

private int id;

@Value(“一心”)

private String name;

}

实体类Teacher:

@Component(“teacher”)

public class Teacher {

@Value(“1”)

private int id;

@Value(“王老师”)

private String name;

}

3.自动装配

==========

3.1 @Autowired


装配属性过程:

(1)spring会默认优先根据(被注解修饰的)属性类型去容器中找对应的组件(bean),找到就赋值;

(2)若找到多个相同类型的组件,再将属性的名称作为组件(bean)的id去容器中查找。

实体类Student:

@Component(“student”)

public class Student {

@Value(“一心同学”)

private String name;

@Autowired

private Teacher teacher;

@Autowired

private Book book;

}

3.2 @Qualifier注解


注意:不可以单独使用

可以和使用Autowired搭配使用:@Qualifier指定需要装配的组件的id,而不是使用属性名

@Component(“student”)

public class Student {

@Value(“一心同学”)

private String name;

@Autowired

@Qualifier(“teacher”)//查找bean的id为teacher的类

private Teacher teacher;

@Autowired

@Qualifier(“book”)

private Book book;

}

使用@Qualifier注解的情况:

当IOC容器根据属性类型去容器中找找到多个相同类型的组件,再将属性的名称作为组件(bean)的id去容器中查找找不到时就是用这两个注解搭配,指定需要装配的bean的id。

3.3  @Resource注解


执行过程

(1)@Resource如有指定的name属性,先按name进行配置文件Bean查找装配;

(2)没有指定name,则用默认的byName方式进行装配;

(3)如果(2)不成功,则按byType的方式自动装配。

(4)都不成功,则报异常。

@Component(“student”)

public class Student {

@Value(“一心同学”)

private String name;

@Resource(name = “teacher”)

private Teacher teacher;

@Resource(name =“book”)

private Book book;

}

3.4  @Autowired与@Resource异同


相同:两者都是实现自动装配功能,都可以写在字段上,或写在setter方法上。

不同

(1)执行顺序不同,@Autowired(未指定name的情况下)先byType,再byName,@Resource先byName,再byType。

(2)@Resource中的name属性一旦指定,就只会按照名称进行装配。

(3)@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用。

(4)@Autowired是Spring定义的; @Resource是java规范。

4.@scope

========

作用范围

  • singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁

  • prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收

@Component(“book”)

@Scope(“prototype”)

public class Book {

@Value(“2”)

private int id;

@Value(“一心”)

private String name;

}

4.2 配置初始化和销毁


@PostConstruct:对类进行初始化调用的方法

@PreDestroy:对类进行销毁调用的方法

代码:

@Component(“book”)

public class Book {

@Value(“2”)

private int id;

@Value(“一心”)

private String name;

@PostConstruct

public void init(){

System.out.println(“init----初始化”);

}

@PreDestroy

public void destroy(){

System.out.println(“destroy----销毁”);

}

}

测试:

@Test

public void test(){

ApplicationContext context = new ClassPathXmlApplicationContext(“bean1.xml”);

Book book=context.getBean(“book”,Book.class);

System.out.println(book);

((ClassPathXmlApplicationContext) context).close();

}

输出:

5.基于Java类进行配置

===================

介绍通过 Java 类的方式提供 Bean 的定义信息

(1)编写实体类Book

@Component(“book”)

public class Book {

@Value(“2”)

private int id;

@Value(“一心”)

private String name;

}

(2)新建一个config配置包,编写一个MyConfig配置类

@Configuration//代表这是一个配置类

public class MyConfig {

@Bean//通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id!

public Book book(){

return new Book();

}

}

测试:

@Test

public void test2(){

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

类Book**

@Component(“book”)

public class Book {

@Value(“2”)

private int id;

@Value(“一心”)

private String name;

}

(2)新建一个config配置包,编写一个MyConfig配置类

@Configuration//代表这是一个配置类

public class MyConfig {

@Bean//通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id!

public Book book(){

return new Book();

}

}

测试:

@Test

public void test2(){

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

[外链图片转存中…(img-tVWySAjM-1721155121665)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值