搜索
首页
笔记
案例
关于
课程列表
Spring
IOC
入门---新建Spring工程
容器接口与实现类
Bean管理(基于XML)
Bean管理(基于注解)
完全注解开发
AOP
AOP概述
AspectJ实现AOP
AOP的实现步骤---前置通知
其他通知的AOP实现
Spring集成Mybatis
Spring整合Mybatis
Spring事务
Spring事务管理
Spring中使用事务
Spring与Web
在Servlet中使用Spring框架
Spring5新功能
课程导航
计算机基础知识
C
Linux
linux常用软件
计算机网络
程序员修养
设计模式
工具
Git
composer
vim
IntelliJ IDEA
wireshark
laravel
Spring
SpringMVC
Maven
数据库
MySQL
Redis
MongoDB
JDBC
Mybatis
MyBatis-Plus
服务端编程
PHP
Java
shell script
JavaWeb
HTML / CSS
HTML
CSS
HTML5
CSS3
BOOTSTRAP
JavaScript
JavaScript
JQuery
layui
Bean管理(基于XML)
完全注解开发
Bean管理(基于注解)
## 创建对象 步骤: * 给类加入@component注解 * 在Spring配置文件中加入组件扫描器 * 创建对象 对于 DI 使用注解,将不再需要在 Spring 配置文件中声明 bean 实例。Spring 中使用注解,需要在 Spring 配置文件中配置组件扫描器,用于在指定的基本包中扫描注解。 **给类加上Component注解**: ```java @Component(value="country") public class Country { private String name; public Country() { } @Override public String toString() { return "Country{" + "name='" + name + '\'' + '}'; } } ``` **在Spring配置文件加入组件扫描器**: ```xml
``` **创建对象:** ```java ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Country country = ac.getBean("country", Country.class); // 需要和@Component中的value对应上 System.out.println(country); // 默认调用无参构造器 ``` ### @Component注解 @Component注解的作用和`
`标签一样,属性value的值就是对象的名称,它必须是唯一的。 该注解有几种写法 * @Component(value="country") * @Component("myCountry") * @Component 该中写法value的默认值为类名的小写形式 ### 组件扫描器 ```xml
``` base-package声明需要扫描的包名,Spring会扫描该包及子包下含@Component注解的类,然后去创建它们的实例。 **使用组件扫描器扫描多个包**: ```xml
``` ### @Repository、@Service、@Controller 这三个注解的功能和@Component类似,用于创建对象的。但它们有额外的功能: * @Repository 用于持久层上,放Dao的实现类上 * @Service 用在业务层上面,放在Service的实现类上 * @Controller 用于控制器上面,放在控制器类上 它们是给项目分层的。 ## 注入属性 ### 简单类型属性注入 在属性上使用@Value注解,使用此方式,无需setter方法。 ```java @Component public class Country { @Value("China") private String name; public Country() { } @Override public String toString() { return "Country{" + "name='" + name + '\'' + '}'; } } ``` 在setter方法上使用@Value注解 ```java @Component public class Country { private String name; public Country() { } @Value("China") public void setName(String name) { this.name = name; } @Override public String toString() { return "Country{" + "name='" + name + '\'' + '}'; } } ``` ### 引入类型属性注入 #### @Autowired byType方式 需要在引用属性上使用注解@Autowired,该注解**默认使用按类型自动装配 Bean 的方式**。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。 ![](http://img.1024phper.com/blog21040214274611609) ```java ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = ac.getBean("user", User.class); System.out.println(user); // User{name='James', age=36, country=Country{name='China'}} ``` #### @Autowired byName方式 需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。 ![](http://img.1024phper.com/blog21040214364934987) #### @AutoWired 中的required属性 @Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。 ![](http://img.1024phper.com/blog21040214394360757) #### @Resource 注入 Spring提供了对 jdk中@Resource注解的支持。@Resource 注解既可以按名称匹配Bean,也可以按类型匹配 Bean。 默认是按名称注入,若按名称没有找到,则会使用byType方式来继续找。若想只按名称,则需指定name属性值 使用该注解,要求 JDK 必须是 6 及以上版本。@Resource 可在属性上,也可在 set 方法上。 ```java @Component("user") public class User { @Value("James") private String name; @Value("36") private int age; //@Resource 先按byName再按byType @Resource(name="country") // 按byName private Country country; public User() { } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + ", country=" + country + '}'; } } ```
Bean管理(基于XML)
完全注解开发
文章目录