注解postmapping_spring 作用

(5) 2024-06-14 16:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
注解postmapping_spring 作用,希望能够帮助你!!!。

从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法,并且被修饰的方法不能抛出异常。

写法有如下两种方式:

@PostConstruct public void method(){} public @PostConstruct void method(){}

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的init()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

服务器加载Servlet过程:

                                                注解postmapping_spring 作用_https://bianchenghao6.com/blog__第1张                            注解postmapping_spring 作用_https://bianchenghao6.com/blog__第2张

另外,spring中Constructor、@Autowired、@PostConstruct的顺序:

其实从依赖注入的字面意思就可以知道,要将对象B注入到对象A,那么首先就必须得生成对象A和对象B,才能执行注入。所以,如果一个类A中有个成员变量b被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么久无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

Constructor >> @Autowired >> @PostConstruct

举个栗子:

@Component public class A { @Autowired private B b; public A() { System.out.println("执行A的构造方法,此时b还未被注入: b = " + b); } @PostConstruct private void init() { System.out.println("@PostConstruct将在依赖注入完成后被自动调用: b = " + b); } } @Component public class B { public B(){ System.out.println("执行B的构造方法"); } } 

测试类:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:application-context.xml"}) public class MessageTest { @Resource A a; @Test public void testAB(){ } }

执行testAB()方法结果:

执行A的构造方法,此时b还未被注入: b = null 执行B的构造方法 @PostConstruct将在依赖注入完成后被自动调用: b = com.nss.B@51841ac6

通过以上结果可以看出:被@PostConstruct注解的方法将在该类中所有注入操作完成之后执行。

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复