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

导航网站怎么做点击网络营销公司排行榜

导航网站怎么做点击,网络营销公司排行榜,c 网站开发调试,seo做网站概述 对于学习Spring的兄弟姐妹来说,觉得这个问题很熟悉,若是要把它回答得很清楚,却是很为难?平时写代码的时候,不会在意这些概念问题,但面试时这个问题出现的频率却是很高,所以还是必须要掌握…

概述

对于学习Spring的兄弟姐妹来说,觉得这个问题很熟悉,若是要把它回答得很清楚,却是很为难?平时写代码的时候,不会在意这些概念问题,但面试时这个问题出现的频率却是很高,所以还是必须要掌握和理解。

Spring Bean定义有哪些方式?

总的来说,分三种:
1)基于xml的方式
2)基于注解的方式
3)基于java类的方式

1、基于xml的方式

XML配置的方式,是Spring最早支持的方式,不过现在XML方式已经用的比较少了,基本上都是用后面的配置方式替代了。

示例:

@Data
@ToString
public class Student {String name;int age;
}
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="student" class="com.koo.entity.Student"/>
</beans>
public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");System.out.println(applicationContext.getBean("student"));}
}

2、基于注解的方式

又分一下几种方式
1) 使用@Component注解 + @ComponentScan包扫描方式
2)@Configuration + @Bean方式
3)FactoryBean方式
4)@Import方式
5)@Import + ImportSelector方式
6)@Import + ImportBeanDefinitionRegistrar方式
7)BeanDefinitionRegistryPostProcessor方式
8)BeanFactoryPostProcessor方式

1) 使用@Component注解 + @ComponentScan包扫描方式

为了解决bean太多时,XML文件过大,从而导致膨胀不好维护的问题。在Spring2.5中开始支持:

@Component、@Repository、@Service、@Controller等注解定义bean。@Component放在类名上面,然后通过@ComponentScan指定一个路径,Spring进行扫描带有@Componet注解的bean,然后加至容器中。

@Component
public class UserHandler {
}
@Service
public class UserService {
}
@Repository
public class UserDao {
}
@Controller
public class UserController {
}
@ComponentScan("com.koo.modules")
@Configuration
public class AppConfig {
}
/*** 通常情况下: ** @Controller:一般用在控制层* @Service:一般用在业务层* @Repository:一般用在持久层* @Component:一般用在公共组件上*/
public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("userDao"));System.out.println(applicationContext.getBean("userService"));System.out.println(applicationContext.getBean("userController"));System.out.println(applicationContext.getBean("userHandler"));}
}

2)@Configuration + @Bean方式

这种方式其实也是我们最常用的方式之一,@Configuration用来声明一个配置类,然后使用 @Bean 注解声明一个bean,将其加入到Spring容器中。通常情况下,如果项目中有使用到第三方类库中的工具类的话,我们都是采用这种方式注册Bean。

示例代码:

public class Student {
}
@Configuration
public class AppConfig {@Beanpublic Student student() {return new Student();}}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("student"));}
}

3)FactoryBean方式

FactoryBean是一个Bean,它允许我们自定义Bean的创建,主要有三个方法:

1、getObject():自定义Bean如何创建;
2、getObjectType():要注册的Bean的类型;
3、isSingleton():是否单例;

示例代码:

public class User {
}
@Component
public class UserFactoryBean implements FactoryBean<User> {@Overridepublic User getObject() throws Exception {return new User();}@Overridepublic Class<?> getObjectType() {return User.class;}@Overridepublic boolean isSingleton() {return true;}
}
@Configuration
@ComponentScan("com.koo. modules")
public class AppConfig {}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("userFactoryBean"));System.out.println(applicationContext.getBean("&userFactoryBean"));}
}

4)@Import方式

public class Student {
}
@Import({Student.class})
@Configuration
public class AppConfig {}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);for (String beanDefinitionName : applicationContext.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}System.out.println("================");System.out.println(applicationContext.getBean("com.koo.modules.entity.Student"));System.out.println(applicationContext.getBean("student"));}
}

5)@Import + ImportSelector方式

首先介绍一下ImportSelector接口的好处,主要有以下两点:

1、把某个功能的相关类放到一起,方面管理和维护。
2、重写selectImports方法时,能够根据条件判断某些类是否需要被实例化,或者某个条件实例化这些bean,其他的条件实例化那些bean等,我们能够非常灵活的定制化bean的实例化。

public class Product {
}
public class User {
}
public class MyImportSelector implements ImportSelector {// 指定需要定义bean的类名,注意要包含完整路径,而非相对路径@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.koo.entity.Product", "com.koo.entity.User"};}}

@Import({MyImportSelector.class})
@Configuration
public class AppConfig {

}


public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);for (String beanDefinitionName : applicationContext.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}		System.out.println(applicationContext.getBean("com.koo.entity.Product"));try {System.out.println(applicationContext.getBean("product"));} catch (Exception e) {e.printStackTrace();}	System.out.println(applicationContext.getBean("com.koo.entity.User"));try {System.out.println(applicationContext.getBean("user"));} catch (Exception e) {e.printStackTrace();}}
}

6)@Import + ImportBeanDefinitionRegistrar方式

这种方式我们需要实现ImportBeanDefinitionRegistrar接口,并重写registerBeanDefinitions()方法,然后定义我们需要注册的Bean的定义信息,然后registry.registerBeanDefinition()方法注册即可。这种方式比ImportSelector更加灵活,可以自定义bean的名称、作用域等很多参数。 像我们常见的Spring Cloud中的Feign,就使用了ImportBeanDefinitionRegistrar,具体可以参考FeignClientsRegistrar类

public class User {
}public class Product {
}public class CustomImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {// 可以自定义bean的名称、作用域等很多参数registry.registerBeanDefinition("user", new RootBeanDefinition(User.class));RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Product.class);rootBeanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);registry.registerBeanDefinition("product", rootBeanDefinition);}
}@Import({CustomImportBeanDefinitionRegistrar.class})
@Configuration
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("product"));System.out.println(applicationContext.getBean("user"));}
}

7)BeanDefinitionRegistryPostProcessor方式

在Spring容器启动方法refresh()方法的invokeBeanFactoryPostProcessors()方法中,会执行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry()方法,它允许对beanDefinition进行后置处理,我们可以在这个方法调整IOC容器中的beanDefinition定义信息,从而干扰到后面bean初始化的过程。

具体代码如下:

public class User {
}@Component
public class CustomBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {registry.registerBeanDefinition("user", new RootBeanDefinition(User.class));}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
}@Configuration
@ComponentScan("com.koo.modules")
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("user"));}
}

8)BeanFactoryPostProcessor方式

其实BeanDefinitionRegistryPostProcessor就是继承自BeanFactoryPostProcessor,所以使用BeanFactoryPostProcessor也可以实现注册Bean的功能。它们的区别如下:

1、 BeanDefinitionRegistryPostProcessor:侧重于bean的注册;
2、 BeanFactoryPostProcessor:侧重于对已经注册的bean的属性进行修改,虽然也可以注册bean;

public class Product {
}@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {DefaultListableBeanFactory registry = (DefaultListableBeanFactory) beanFactory;registry.registerBeanDefinition("product", new RootBeanDefinition(Product.class));}
}@Configuration
@ComponentScan("com.koo.modules")
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("product"));}
}

3、基于Java类的方式

1.使用@Configuration注解需要作为配置的类,表示该类将定义Bean的元数据
2.使用@Bean注解相应的方法,该方法名默认就是Bean的名称,该方法返回值就是Bean的对象。
3.AnnotationConfigApplicationContext或子类进行加载基于java类的配置

@Configuration  
public class BeansConfiguration {  @Bean  public Student student(){  Student student=new Student();  student.setName("张三");  student.setTeacher(teacher());  return student;  }  @Bean  public Teacher teacher(){  Teacher teacher=new Teacher();  teacher.setName("李四");  return teacher;  }  
}  
public class Client{  public static void main(String args[]){  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class);  Student student = (Student) context.getBean("student");Teacher teacher = (Teacher) context.getBean("teacher");System.out.println("学生的姓名:" + student.getName() + "。老师是" + student.getTeacher().getName());  System.out.println("老师的姓名:" + teacher.getName());  }  } 

示例源码:https://gitee.com/charlinchenlin/koo-erp

http://www.hkea.cn/news/96695/

相关文章:

  • wordpress 文章主题关键词推广seo
  • 佛山网站建设佛山网络推广代运营公司靠谱吗
  • 贵阳疫情最新消息站内seo优化
  • wordpress相关问题深圳百度关键字优化
  • 做国珍新时代 网站陕西seo顾问服务
  • 建立网站怎么做关键字搜索引擎营销的作用
  • 广州手机网站建设宁波seo优化费用
  • 怎么设置网站服务器宁德市教育局官网
  • 查看网站源代码建站可以牛排seo系统
  • 政府网站建设的基本原则百度网盘电脑版
  • 张家港网站建设福州百度快速优化
  • 兼职做网站编辑百度搜索推广开户
  • 谁告诉你j2ee是做网站的宁波网站推广找哪家公司
  • 谷歌外贸建站多少钱搭建网站教程
  • 赚钱靠普的网站关键字搜索软件
  • 建设银行深分行圳招聘网站做游戏推广一个月能拿多少钱
  • 北京网站建设及推广招聘关键词排名代做
  • 对网站建设的意见建议网络营销推广的方法有哪些
  • 爬虫网站怎么做怎样才能在百度上面做广告宣传
  • 网站页码南昌做seo的公司有哪些
  • 网络设计方案包括哪些深圳百度推广seo公司
  • 亚马逊跨境电商开店站长工具seo综合查询5g
  • 网站怎么做百度快照logo百度快照优化推广
  • 山西网站建设排名seo技术培训山东
  • 日韩系成人影片成首选网站如何优化推广
  • 网站到期续费通知搜索风云排行榜
  • 网站公司说我们做的网站服务器不够用哪个杭州seo好
  • 类似淘宝网站建设费用杭州哪家seo公司好
  • 装修网站怎样做seo专员很难吗
  • 无锡网站外包如何接广告赚钱