当前位置: 首页 > wzjs >正文

怎么查看网站收录大丰网站建设哪家好

怎么查看网站收录,大丰网站建设哪家好,wordpress小清新主题,网站搭建策略与方法有哪些方面1.方法Bean的存储 1.1 方法Bean介绍 类注解是添加到某个类上的, 但是存在两个问题: 1.使用外部包⾥的类, 没办法添加类注解 2.一个类, 需要多个对象, ⽐如多个数据源这种场景, 我们就需要使用方法注解 相比类注解(Component等)定义对象的身…

1.方法Bean的存储

1.1 方法Bean介绍

类注解是添加到某个类上的, 但是存在两个问题:
1.使用外部包⾥的类, 没办法添加类注解
2.一个类, 需要多个对象, ⽐如多个数据源这种场景, 我们就需要使用方法注解

相比类注解(@Component等)定义对象的身份,方法注解更像“操作指令”,告诉容器如何处理方法或其返回值。

@Bean Spring中最核心的方法注解,通常用在@Configuration标记的配置类中。它的作用是告诉IoC容器:“这个方法的返回值是一个Bean,请帮我管理它。”

1.2 示例

1.2.1 错误1:方法注解没和类注解一起用

创建一个UserInfo类:

@Data
public class UserInfo {private int id;private String name;private int age;}

创建BeanConfig类,把类中的方法放进容器中:

public class BeanConfig {@Beanpublic UserInfo userInfo1(){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName("liming");userInfo.setAge(18);return userInfo;}@Beanpublic UserInfo userInfo2(){UserInfo userInfo =new UserInfo();userInfo.setId(2);userInfo.setName("张三");userInfo.setAge(20);return userInfo;}
}

从容器中取出Bean:

@SpringBootApplication
public class Test1Application {public static void main(String[] args) {// 获取上下文ApplicationContext context = SpringApplication.run(Test1Application.class, args);//获取userInfo1UserInfo userInfo1 = (UserInfo)context.getBean("userInfo1");System.out.println(userInfo1);//获取userInfo2UserInfo userInfo2 = (UserInfo)context.getBean("userInfo2");System.out.println(userInfo2);}}

运行结果:
在这里插入图片描述
原因:
方法注解要和类注解一起使用,否则方法无法放到容器中

修改后的代码:

@Configuration
public class BeanConfig {@Beanpublic UserInfo userInfo1(){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName("liming");userInfo.setAge(18);return userInfo;}@Beanpublic UserInfo userInfo2(){UserInfo userInfo =new UserInfo();userInfo.setId(2);userInfo.setName("张三");userInfo.setAge(20);return userInfo;}
}

运行结果:
在这里插入图片描述

1.2.2 错误2:没有设置可以传参的Bean

上面写的方法Bean中的userInfo是固定的,怎么设置可以变动的userInfo呢?

在方法中加入参数:

@Configuration
public class BeanConfig {@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}}

获取userInfo1的Bean:

@SpringBootApplication
public class Test1Application {public static void main(String[] args) {// 获取上下文ApplicationContext context = SpringApplication.run(Test1Application.class, args);//获取userInfo1UserInfo userInfo1 = (UserInfo)context.getBean("userInfo1");System.out.println(userInfo1);}}

运行结果:
在这里插入图片描述

在BeanConfig类中添加一个Bean方法,修改后:

@Configuration
public class BeanConfig {@Bean //添加一个返回String类型的Beanpublic String name(){return "liming";}@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}
}

运行结果:
在这里插入图片描述

我们可以发现,上面的name方法的名字和userInfo(String name)中的name一样,如果再创建一个返回String类型的Bean呢?会发生什么呢?

@Configuration
public class BeanConfig {@Beanpublic String name(){return "liming";}@Beanpublic String name2(){return "zhangsan";}@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}
}

运行结果:
在这里插入图片描述

userInfo(String name)中的参数name的匹配是不是与上面方法name()、name2()的上下顺序有关呢?

把name()和name2()位置变换:

@Configuration
public class BeanConfig {@Beanpublic String name2(){return "zhangsan";}@Beanpublic String name(){return "liming";}@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}
}

运行结果:
在这里插入图片描述

把name()方法去掉,留下name2()方法:

@Configuration
public class BeanConfig {@Beanpublic String name2(){return "zhangsan";}@Beanpublic String name(){return "liming";}@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}
}

运行结果:
在这里插入图片描述

1.2.3错误3:多个名字不一样的Bean传参

把返回String类型的Bean存入容器:

@Configuration
public class BeanConfig {@Beanpublic String name3(){return "liming";}@Beanpublic String name2(){return "zhangsan";}@Beanpublic UserInfo userInfo1(String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}}

获取userInfo1的Bean:

@SpringBootApplication
public class Test1Application {public static void main(String[] args) {// 获取上下文ApplicationContext context = SpringApplication.run(Test1Application.class, args);//获取userInfo1UserInfo userInfo1 = (UserInfo)context.getBean("userInfo1");System.out.println(userInfo1);}}

运行结果:
在这里插入图片描述
可以发现,方法Bean的名称就是方法名。

需要约定传参(注入):

@Configuration
public class BeanConfig {@Beanpublic String name3(){return "liming";}@Beanpublic String name2(){return "zhangsan";}@Beanpublic UserInfo userInfo1( @Qualifier("name3") String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}
}

1.2.4总结

总结:
(1)方法Bean注解要和类Bean注解一起使用
(2)方法Bean需要传参时要设置可以传参的方法Bean
(3)传参时优先传参参数名和Bean名字一样的
(4)如果没有名字一样但是类型有多个的Bean,需要约定哪个Bean传参(注入)。

2.Bean重命名

可以通过设置 name 属性给 Bean 对象进⾏重命名操作,如下代码所示:

@Configuration
public class BeanConfig {@Beanpublic String name1(){return "liming";}//下面三种方法都可以使用//@Bean({"u1","userInfo1"})//@Bean("u1")@Bean(name={"u1","userInfo1"})//起别名u1public UserInfo userInfo1( @Qualifier("name1") String name){UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setName(name);userInfo.setAge(18);return userInfo;}}

在容器中取名字为userInfo1u1的Bean

@SpringBootApplication
public class Test1Application {public static void main(String[] args) {// 获取上下文ApplicationContext context = SpringApplication.run(Test1Application.class, args);//获取userInfo1UserInfo userInfo1 = (UserInfo)context.getBean("userInfo1");System.out.println(userInfo1);//获取userInfo1UserInfo u1 = (UserInfo)context.getBean("u1");System.out.println(u1);}}

运行后的结果:
在这里插入图片描述

结论:给Bean起别名后,Bean的新名字和旧名字都可以使用。

3.扫描路径

3.1示例

使用前面学习的四个注解声明的bean,⼀定会⽣效吗?
答: 不⼀定(原因:bean想要⽣效,还需要被Spring扫描)

下面是启动类默认的路径:
在这里插入图片描述
运行时,可以正常启动。

下⾯我们通过修改项⽬⼯程的⽬录结构,来测试bean对象是否⽣效:
在这里插入图片描述
再次运行,发生报错:
在这里插入图片描述
为什么呢?

3.2 @ComponentScan注解

使⽤五⼤注解声明的bean,要想⽣效, 还需要配置扫描路径, 让Spring扫描到这些注解

也就是通过@ComponentScan来配置扫描路径.

@SpringBootApplication注解的父注解有@ComponentScan:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {......
}

@ComponentScan()中的意思是:
默认会扫描主类所在包及其子包下的所有 @Component,但 Spring Boot 的自动配置类(如 spring-boot-autoconfigure 包下的类)不应该被直接扫描注册,因为它们由 @EnableAutoConfiguration 按需加载

但是我们也可以自定义设置扫描路径:
启动类放的位置:
在这里插入图片描述
启动类代码:

@ComponentScan("org.example.test1")//扫描的包
@SpringBootApplication
public class Test1Application {public static void main(String[] args) {// 获取上下文ApplicationContext context = SpringApplication.run(Test1Application.class, args);//获取userInfo1UserInfo userInfo1 = (UserInfo)context.getBean("userInfo1");System.out.println(userInfo1);//获取userInfo1UserInfo u1 = (UserInfo)context.getBean("u1");System.out.println(u1);}}

运行后,结果:
在这里插入图片描述


文章转载自:

http://8Z9AD0Qu.shprz.cn
http://UO2Kvkzd.shprz.cn
http://LIRXLwuK.shprz.cn
http://ziGlGSiX.shprz.cn
http://7MV54krh.shprz.cn
http://JcgYOtM2.shprz.cn
http://4oaqaEmO.shprz.cn
http://56vZYXkN.shprz.cn
http://ZcIcC4sF.shprz.cn
http://nqtuE3fg.shprz.cn
http://sd9fVyEB.shprz.cn
http://hOXGSFjf.shprz.cn
http://zs6Iyauy.shprz.cn
http://keaeOVhm.shprz.cn
http://UVRH8dXG.shprz.cn
http://5QPsU18d.shprz.cn
http://4DE9GiJG.shprz.cn
http://S9yJ9FIc.shprz.cn
http://KHpfGLbW.shprz.cn
http://PeB2NOXz.shprz.cn
http://FgfsSinH.shprz.cn
http://KuZvCVQ6.shprz.cn
http://Rh5Ux44r.shprz.cn
http://BkJ1EFBt.shprz.cn
http://qZj5MPPP.shprz.cn
http://dwc893jM.shprz.cn
http://V5Ew6akv.shprz.cn
http://yu9Lqjax.shprz.cn
http://9MwEa7RD.shprz.cn
http://cRaMchCv.shprz.cn
http://www.dtcms.com/wzjs/688946.html

相关文章:

  • iis7.5 配置网站中国十大网站建设
  • 岳池做网站电话wordpress xml 导入失败
  • 龙岩网站开发较好的公司网站摸板
  • 高端网站开发哪家强青岛北京网站建设公司
  • 怎么做网站的301网站建设任务
  • 知名网站制作网站建设中++模板
  • 利用虚拟主机建设网站的实验报告郑州网站维护推广
  • 企业形象成品网站注册公司什么网站
  • 怎样创建网站挣钱全屏网站代码
  • 成都网站建设推荐到访率公司徐州网站制作案例
  • 建网站的程序免费电子商务怎样建立网站的
  • 做好网站如何发布网站建设公司的优势
  • 建设网站是要先建站在备案么中药网站模板
  • 温州专业微网站制作公司做网站推广对电脑有什么要求
  • 申请一个免费的网站空间网站推广的岗位要求
  • 网站建设用模板好吗中小企业有哪些公司名单
  • 徐水区住房和城乡建设局网站51源码
  • 请问大连谁家做网站网站建设费如何账务处理
  • 自己做的网站如何联网湛江网站制作工具
  • 菜鸟做网站金蝶直播
  • c程序设计教学网站怎么做软件开发工程师需要具备的能力
  • python做网站还是数据益阳网站建设益阳
  • 网站修改关键词不收录设一个网站链接为安全怎么做
  • 软件 网站模板各大网站平台发布信息
  • 如何建设备案网站视频教程软文的概念
  • php网站301重定向kaalus.wordpress
  • 帝国cms能建设视频网站吗百度录取线我的wordpress
  • 陕西省建设工程施工许可证查询网站网站会员营销
  • 响应式布局网站实例建设网站的主要设备
  • 建设工程项目在哪个网站查询WordPress更改自定义侧边栏宽度