spring 注解配置
以前刚开始学spring的时候,我们最初用的配置是通过XML的方式读取bean,而如今随着SpringBoot跟SpringCloud的流行,越来越多的企业都开始使用Spring注解方式获取Bean.
1 @Configuration 类似Spring中的xml配置文件
主要pom.xml
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.12.RELEASE</version> </dependency> </dependencies>
2 Person类
package com.melon.bean; public class Person { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
2 spring的bean.xml
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!--2 xml配置的包扫描 只要标注了@controller @service @Repository @component 任何一个组件--> <!--<context:component-scan base-package="com.melon"></context:component-scan>--> <!--1第一节xml bean 配置 跟 @bean--> <bean id="person" class="com.melon.bean.Person"> <property name="age" value="10"></property> <property name="name" value="zhangsan"></property> </bean> </beans>
3 原始的测试方式
package com.melon.bean; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Person bean = (Person)applicationContext.getBean("person"); System.out.println(bean); } }
结果成功了。
下面改成Spring注解方式读取bean,也就是不需要bean.xml,然后Perons类不变,多个Config类
@Configuration public class MainConfig { //给容器注册个Bean,类型为返回的类型,id默认是用方法名作为id @Bean public Person person(){ Person person = new Person(); person.setAge(121); person.setName("zhangsan"); return person; } }
测试注解方式
public class SpringAnnotationTest { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); Person person = applicationContext.getBean(Person.class); System.out.println(person); } }
二 利用注解方式@ComponantScan代替Xml方式的ComponentScan
原先xml方式
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!--2 xml配置的包扫描 只要标注了@controller @service @Repository @component 任何一个组件--> <context:component-scan base-package="com.melon"></context:component-scan> </beans>
测试方式差不多
现在改成@componantScan方式
package com.melon.config; import com.melon.bean.Person; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; //配置类=配置文件 @Configuration //告诉spring这是一个配置类 @ComponentScan(value = "com.melon", //扫描时候需要排除的组件 excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes ={Controller.class,Service.class})} //includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes ={Controller.class})} //,useDefaultFilters = false ) //包扫描的根目录 //扫描时候只包含 public class MainConfig { //给容器注册个Bean,类型为返回的类型,id默认是用方法名作为id @Bean public Person person(){ Person person = new Person(); person.setAge(121); person.setName("zhangsan"); return person; } }
测试
package com.melon.config; import com.melon.bean.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class SpringAnnotationTest { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); //Person person = applicationContext.getBean(Person.class); //System.out.println(person); //打印组件 String[] names =applicationContext.getBeanDefinitionNames(); for(String name : names){ System.out.println(name); } } }
相关推荐
在Spring框架中,`@Configuration`和`@Bean`是非常重要的两个注解,它们被广泛应用于定义Spring容器中的Bean以及Bean的配置方式。传统的Spring配置是通过XML文件来完成的,而在现代的Java开发中,更倾向于采用基于...
为了启用注解配置,我们需要在Spring配置中添加`@Configuration`和`@ComponentScan`: ```java @Configuration @ComponentScan(basePackages = {"com.example.myapp"}) // 指定需要扫描的包 public class AppConfig...
总的来说,Spring注解极大地简化了Spring应用的配置,使得开发者可以更加专注于业务逻辑,而不是繁琐的XML配置。通过合理使用@Autowired、@ComponentScan等注解,我们可以构建出松散耦合、易于维护的系统。在实践中...
在Spring Boot应用中,`@Configuration`注解用于标记一个类作为配置类,它提供了声明式的方式来装配Bean。在标题提到的“自定义@Configuration配置类启用开关第二个版本.zip”中,我们可以推测这是一个关于如何在...
在Spring中,`@Configuration`和`@Bean`注解是纯注解配置的关键。`@Configuration`注解的类表示这是一个配置类,而`@Bean`注解的方法则表示该方法的返回值将被注册为一个Spring Bean。例如,创建一个DataSource Bean...
@Configuration用于传统的XML配置替代,而@SpringBootApplication是Spring Boot的特殊配置,包含了@ComponentScan、@EnableAutoConfiguration和@Configuration的组合。 5. 注意使用@Scope注解:默认情况下,Spring...
1. **Spring注解配置**: - `@Configuration`:标记一个类为Spring配置类,可替代传统的XML配置。 - `@ComponentScan`:用于扫描指定包下的所有@Component及其子注解(如@Service、@Repository、@Controller)的类...
在Spring应用中,我们需要一个配置类,通常使用@Configuration和@ComponentScan注解来定义bean的配置和扫描范围。然后,通过@SpringBootApplication注解(在Spring Boot项目中)或传统的Java配置类(在标准Spring...
Spring可以通过`<context:component-scan>` XML标签或`@ComponentScan`注解来自动扫描并注册带有`@Component`及其派生注解的类。扫描范围可以通过指定包名来控制。 5. **别名(Aliases)** 可以通过`@Component(...
在Spring框架中,`@Configuration`、`@Bean` 和 `@ComponentScan` 是三个非常重要的注解,它们是Spring应用程序上下文(ApplicationContext)配置的核心元素。这些注解的使用对于理解和构建基于Java配置的Spring应用...
##### 2.2 在 @configuration 中引入其他注解配置 - **实现方式**:使用 `@Import` 注解引入其他配置类。 ```java @Configuration @Import({SecurityConfig.class, DatabaseConfig.class}) public class ...
} }在测试类中,我们使用 AnnotationConfigApplicationContext 而不是 ClassPathXmlApplicationContext,因为 MyConfig 类上有 @Configuration 注解,表明这是一个配置类,Spring 将会读取这个类来创建 Bean。...
在这个名为“Spring注解开发组件扫描器”的资料中,我们将深入探讨如何利用注解进行组件扫描以及自定义组件扫描过滤器。 首先,让我们理解Spring中的注解驱动开发。在Spring中,我们可以使用如@Service、@...
当在配置中启用组件扫描时(例如,通过`@ComponentScan`注解),Spring会遍历指定包及其子包下的所有类,寻找这些注解,然后实例化Bean并将其添加到ApplicationContext中。这样,开发者就不需要在XML配置文件中逐个...
利用注解配置Spring容器的方法 Spring框架作为Java EE中的轻量级容器,提供了基于POJO的编程模型,利用注解配置Spring容器的方法可以简化配置过程,提高开发效率。本文将详细介绍利用注解配置Spring容器的方法。 ...
@SpringBootApplication 注解是 Spring Boot 的核心注解,它是一个组合注解,实际上是三个 Annotation 的组合:@Configuration、@EnableAutoConfiguration 和 @ComponentScan。这些注解的结合使用,使得 Spring Boot ...
@SpringBootApplication: 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。 @Configuration: 等同于Spring...
综上所述,Spring的注解配置提供了高度的灵活性和控制力,从扫描组件到条件注册,再到自定义对象的创建,都可以通过注解来实现。理解并熟练掌握这些知识,能够帮助我们在开发过程中更高效地利用Spring框架。
在Spring配置类或者XML配置文件中,使用`@ComponentScan`并添加`@ComponentScan annonation`属性,指定自定义注解的名称。这样,Spring在扫描过程中会识别并处理标记了这个注解的类。 ```java import org.spring...