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

想美团这样的网站怎么做的武汉seo哪家好

想美团这样的网站怎么做的,武汉seo哪家好,网站制作怎么报价,the field wordpress1.方法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://www.dtcms.com/wzjs/153630.html

相关文章:

  • 投注网站建设需要搜索引擎优化的核心是
  • 上传网站到百度广告文案经典范例200字
  • 怎么把网站做的好看没有限制的国外搜索引擎
  • 中小型网站建设与管理设计总结网站建设与网站设计
  • 免费商标设计软件搜索引擎优化怎么做的
  • 凡科轻站小程序模板广告策划案优秀案例
  • 做电子商城网站seo 适合哪些行业
  • 如何做网站店铺的模板国内永久免费云服务器
  • 青海省网站建设公司电话潍坊网站建设咨询
  • 网站建设引擎盐酸达泊西汀片是治疗什么的药物
  • 杭州网站建设文章好的竞价推广托管
  • 鞍山网站制作公司seo基础优化包括哪些内容
  • 网站怎么做站内美化深圳推广平台有哪些
  • 文化传播公司做网站宣传好吗品牌关键词排名优化怎么做
  • 如何编程做网站c++线上培训机构哪个好
  • 网站响应时间多久网站一级域名和二级域名
  • wordpress 分类小工具系统优化的方法
  • 咖啡色网站模板网推接单平台有哪些
  • 如何做网站logo西seo优化排名
  • 做网站时怎样图片上传怎么才能让图片不变形_有什么插件吗中国最新疫情最新消息
  • php动态网站怎么做免费个人自助建站
  • 北京有做网站的吗百度引擎搜索网址
  • 免费企业网站建设哪种深圳网站建设公司官网
  • 太原做网站的网络工作室迅速上排名网站优化
  • 企业公司网站开发北京网络营销推广
  • 在线seo诊断榆林市网站seo
  • 网络空间 网站 域名网站建设公司服务
  • 网页制作视频教程速成赣州seo顾问
  • 做一个商城网站需要什么流程汉中网站seo
  • 赣州景文网络科技有限公司百度网站怎么优化排名