一、是否使用@Bean注解的区别 1、问题发现
我一直有一个疑问。 我们都知道bean是什么意思,我们使用@Bean来教导对象或方法来管理。 但在实际使用过程中,我们发现如果单纯调用一个对象的后一个方法,不需要使用@Bean注解就可以调用。 那么如何体现对对象的控制呢? 管理方面呢?
这里,在这个类中无论有没有@Bean都可以正常使用。
2.问题分析
在上面的地方添加一个输出
添加@Bean并刷新页面几次。 后台结果如下:
可以看出,使用@Bean注解时,无论页面刷新多少次(即方法执行多少次),添加该注解的方法只在最开始(在该方法之前)执行一次。页面刷新),之后就不再执行。
不添加@Bean,多次刷新页面,后台结果如下:
可以看到,在不使用@Bean注解的情况下,方法(())只会在页面刷新时执行(即执行该方法),并且执行次数是一样的。
这样一比较,结果就很明显了。 @Bean注解的对象或者方法确实是被管理的,而且这样效率更高,因为这里也可以清楚的看到bean是什么意思,他只创建了一个对象,但是却可以使用无数次,不需要任何其他的管理。 该对象创建一次,使用一次; 通过查询,管理的对象默认是单例模式(即对象只创建一次,但可以多次使用),并且是风格。 当然,这只是有无注解的区别之一。
二、@Bean和@的对应使用 1、问题发现
众所周知,如果通过@Bean将对象交给管理,通过@实现自动装配,那么如果是不同的方法,返回类型相同,显然是不行的。
2.问题分析
让我们看看问题是什么
什么意思?
无法自动组装。 有多个 '' 类型的 bean
其实很容易理解。 你的两个返回值是一样的。 如何确定自动组装的是哪种方法?
3.问题解决方案一,同名
这种情况下,会自动根据你的自动组装对象的名称和方法名称是否一致来进行判断。 因此,这里只需要让你的自动组装方法名与托管方法名保持一致即可,如下:
方法2、@指定
使用@指定名称,如下:
方法三、@Bean主键添加属性
在@Bean()中填写name属性
方法四、使用不同的注解
例如,如果一个管理方法有多个注解,并且两者之间的注解不同,那么在自动组装时只需要编写相应的注解即可,如下:
当然,这些注解并不是随便添加的,而是根据需要添加的,所以严格来说,这并不能算是一种解决方案。
总而言之,我们使用官方的,是为了让你的自动装配对象名称与方法对象(即方法一)保持一致。 这不是最方便的吗?
三、如何运行不在启动类所在包下的文件?
众所周知,在一个项目中,默认会执行启动类所在包下的文件。 那么不在包下怎么执行呢?
方法一、使用@Bean注解
结果
方法二、@注解
当将bean交给管理时,如果该bean不在启动类的包或子包中英语作文,可以通过方法将该类导入到配置类中。
有人会说包扫描,但实际上这里最好不要使用包扫描。 涉及到最底层,大概就是默认扫描的@n注解设置。 我是新手QAQ。
@扫描没有指定,所以默认扫描当前启动类所在的包。 既然没有人指定包,我们最好不要指定它。
四、@Bean和@1.@Bean
官方解释:只有当指定的类实例对象在容器中不存在时,相应的配置才会生效。
这意味着如果该对象已经被管理,则将不再创建它。
运行结果:
可以看到还没有执行
如果没有对应的bean,则创建它
2.@
官方解释:只有指定的类实例对象存在于容器中时,相应的配置才会生效。
也就是说,只有该对象已经存在时才会被创建。 例如,连接池只有当连接池有数据对象时才会创建,否则不会创建。