企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
~~~ 常用IOC注解: Spring的IOC容器是Map结构 按照功能分类: 1.创建对象 * 作用和在XML配置文件中<bean>标签实现的功能是一样的 1) Component: 作用:用于把当前类对象存入spring容器 属性: * value:指定bean的id.如果不写,默认值是当前类名,且首字母小写 2) Controller 一般用在表现层 3) Service 一般用在业务层 4) Repository 一般用在持久层 这4个注解的作用和属性是一样的 2.注入数据 Autowired: 作用: 自动注入.只要容器中有唯一的bean对象类型匹配成功,就能注入成功 如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错. 作用位置: 可以是变量上,也可以是方法上 细节: 在使用注解注入时,set方法就不是必须的了 Qualifier: 作用:在按照类中注入的基础之上再按照名称注入.它在给类成员注入时不能单独使用.但是在给方法参数注入时可以 属性: value:用于指定注入bean的id Resource 作用:直接按照bean的id注入.它可以独立使用 属性: name:用于指定bean的id 以上三个注入都能注入其他bean类型的数据,而基本类型和String类型无法使用以上注解实现. 别外,集合类型的注入只能通过XML来实现. value: 作用:用于注入基本类型和String类型的数据 属性: value:用于指定数据的值.它可以使用spring中SpEL(也就是spring的el表达式) SpEL的写法:${表达式} 3.作用范围 作用和在bean标签中使用scope属性实现的功能是一样的 Scope 作用:用于指定bean的作用范围 属性: value: 指定范围的取值.常用取值:singleton,prototype,默认singleton singleton:单例 prototype: 多例 4.生命周期 作用和在bean标签中使用init-method和destroy-methode的作用是一样的. PreDestroy 作用:用于指定销毁方式 PostContruct 作用:用于指定初始化方法 ~~~ ***** ~~~ <?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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 告知spring在创建容器时要扫描的包,标签是context --> <context:component-scan base-package="com.itheima"></context:component-scan> </beans> ~~~ ***** ~~~ package com.itheima.service.impl; import com.itheima.dao.IAccountDao; import com.itheima.service.IAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.util.*; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com */ /** * 账户的业务层实现类 */ //@Component //@Component(value = "accountService9") @Service(value = "accountService9") //@Scope("prototype") @Scope("singleton") public class AccountServiceImpl9 implements IAccountService { // // @Autowired //// @Qualifier("accountDao1") // @Qualifier("accountDao2") // private IAccountDao accountDao; // @Autowired // private IAccountDao accountDao;//多个IAccountDao对象时,造成系统错误 @Resource(name = "accountDao1") private IAccountDao accountDao; public void saveAccount() { accountDao.saveAccount(); } @PostConstruct public void init(){ System.out.println("生命周期,初始化...."); } @PreDestroy public void destroy(){ System.out.println("生命周期,对象销毁"); } } ~~~ ***** ~~~ package com.itheima.dao.impl; import com.itheima.dao.IAccountDao; import org.springframework.stereotype.Repository; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com */ /** * 账户的持久层实现类 */ @Repository("accountDao1") public class AccountDaoImpl implements IAccountDao { public void saveAccount() { System.out.println("AccountDao 保存了账户1111!"); } } ~~~ ***** ~~~ package com.itheima.dao.impl; import com.itheima.dao.IAccountDao; import org.springframework.stereotype.Repository; /** * @author: hcf * @qq: 46914685 * @email: 46914685@qq.com */ /** * 账户的持久层实现类 */ @Repository("accountDao2") public class AccountDaoImpl2 implements IAccountDao { public void saveAccount() { System.out.println("AccountDao 保存了账户2222!"); } } ~~~