nice电脑注册账号

发布时间: 2023-04-17 17:09 阅读: 文章来源:转载

本篇我们一起来看一下Spring Framework Bean的注册。这里我总结了下BeanDefinition注册的方式有以下几种:

* XML 配置元信息* Java 注解配置元信息* @Bean* @Component* @Import* Java API 配置元信息* 命名方式* 非命名方式* 配置类方式

接下来我们就通过案例来实践一下,代码如下:

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.eleven.thinking.in.spring.bean.definition;import org.eleven.thinking.in.spring.ioc.overview.domain.User;import org.springframework.beans.factory.config.BeanDefinition;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Import;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import java.util.Map;import static org.springframework.beans.factory.support.BeanDefinitionBuilder.genericBeanDefinition;/** * 注解 BeanDefinition 示例 * * @author * @since */// 3. 通过 @Import 来进行导入@Import(AnnotationBeanDefinitionDemo.Config.class)public class AnnotationBeanDefinitionDemo {public static void main(String[] args) {// 创建 BeanFactory 容器AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();// 注册 Configuration Class(配置类)applicationContext.register(AnnotationBeanDefinitionDemo.class);// 通过 BeanDefinition 注册 API 实现// 1. 命名 Bean 的注册方式registerUserBeanDefinition(applicationContext, "eleven-user");// 2. 非命名 Bean 的注册方法registerUserBeanDefinition(applicationContext);// 启动 Spring 应用上下文applicationContext.refresh();// 按照类型依赖查找System.out.println("Config 类型的所有 Beans" + applicationContext.getBeansOfType(Config.class));System.out.println("User 类型的所有 Beans" + applicationContext.getBeansOfType(User.class));// 显示地关闭 Spring 应用上下文applicationContext.close();}public static void registerUserBeanDefinition(BeanDefinitionRegistry registry, String beanName) {BeanDefinitionBuilder beanDefinitionBuilder = genericBeanDefinition(User.class);beanDefinitionBuilder.addPropertyValue("id", 1L).addPropertyValue("name", "eleven");// 判断如果 beanName 参数存在时if (StringUtils.hasText(beanName)) {// 注册 BeanDefinitionregistry.registerBeanDefinition(beanName, beanDefinitionBuilder.getBeanDefinition());} else {// 非命名 Bean 注册方法BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinitionBuilder.getBeanDefinition(), registry);}}public static void registerUserBeanDefinition(BeanDefinitionRegistry registry) {registerUserBeanDefinition(registry, null);}// 2. 通过 @Component 方式@Component // 定义当前类作为 Spring Bean(组件)public static class Config {// 1. 通过 @Bean 方式定义/** * 通过 Java 注解的方式,定义了一个 Bean */@Bean(name = {"user", "eleven-user"})public User user() {User user = new User();user.setId(1L);user.setName("eleven");return user;}}}

以上我们通过不同的方式对BeanDefinition进行了注册,同学们可以自己实践一下。

•••展开全文
相关文章