一、基本信息
-
maven依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>indi.com</groupId> <artifactId>spring-annotion</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <!-- spring 核心容器 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.8.RELEASE</version> </dependency> </dependencies> </project>
-
Pesrion类
package indi.com.bean; public class Person { private String name; private Integer age; //有参构造、无参构造、get、set、toString方法 }
二、代码
2.1 注入对象
方式一:XML
-
xml配置文件:persion.xml
<bean id="person" class="indi.com.bean.Person"> <property name="name" value="张三"></property> <property name="age" value="18"></property> </bean>
-
测试
package indi.com; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainTest { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("persion.xml"); Person person= (Person )applicationContext.getBean("person"); System.out.println(person); } }
-
项目结构
方式2:注解方式
-
配置类:BeanConfig
package indi.com.config; import indi.com.bean.Person; import org.springframework.context.annotation.Bean; @Configuration//告诉spring这是一个配置类 public class BeanConfig { // @Bean//给容器注入一个bean,类型为返回值的类型,id默认方法名就是id @Bean("person")//指定id为person public Person person(){ return new Person("李四",12); } }
-
测试
package indi.com; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainTest { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class); Person person =applicationContext.getBean(Person.class); System.out.println(person); String[] beanNamesForType = applicationContext.getBeanNamesForType(Person.class); for(String name:beanNamesForType){ System.out.println(name); } } }
包扫描 :
xml方式:
- 添加扫描
<!--包扫描,能扫描到添加@Service,@Controller,@Component,@Repository的类--> <context:component-scan base-package="indi.com"></context:component-scan>
- 测试:
注解方式:
- 添加扫描
@ComponentScan(value="indi.com")
- 测试
package indi.com; import indi.com.bean.Person; import indi.com.config.BeanConfig; import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainTest { public static void main(String[] args) { // // String[] beanNamesForType = applicationContext.getBeanNamesForType(Person.class); // for(String name:beanNamesForType){ // System.out.println(name); // } ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class); String[] annotationNames = applicationContext.getBeanDefinitionNames(); for(String name:annotationNames){ System.out.println(name); } } }
- 不扫描注解为@Controller,@Service的类
@ComponentScan(value="indi.com", excludeFilters = {//指定不扫描的类 //不扫描注解为@Controller,@Service的类 @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, Service.class}) })
完整代码:
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
>
<!--包扫描,能扫描到添加@Service,@Controller,@Component,@Repository的类-->
<context:component-scan base-package="indi.com"></context:component-scan>
<bean id="persion" class="indi.com.bean.Person">
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
</bean>
</beans>
注解方式:
package indi.com.config;
import indi.com.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="indi.com",
excludeFilters = {//指定不扫描的类
//不扫描注解为@Controller,@Service的类
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, Service.class})
})
public class BeanConfig {
// @Bean//给容器注入一个bean,类型为返回值的类型,id默认方法名就是id
@Bean("person")//指定id为person
public Person person(){
return new Person("李四",12);
}
}