SpringIOC注入
在lagou的训练营的学习历程
SpringIOC实例化Bean的三种方式:
1.使用无参构造器
2.静态方法
3.实例化方法。他要先实例化创建类(和2的区别),再调用。
XML注入属性
DI依赖注入,根据实体类的属性的名称使用name属性注入,index按照对应位置
(set注入使用bean使用ref,一般属性用value。)
<!--id标识对象,class是类的全限定类名--> <!--scope:定义bean的作用范围 singleton:单例,IOC容器中只有一个该类对象,默认为singletonprototype:原型(多例),每次使用该类的对象(getBean),都返回给你一个新的对象,Spring只创建对象,不管理对象 --> -<bean destroy-method="destory" init-method="init" scope="singleton" class="com.dao.impl.JdbcTemplateDaoImpl" id="accountDao"> <!--set注入使用property标签,如果注入的是另外一个bean那么使用ref属性,如果注入的是普通值那么使用的是value属性--> <!--<property name="ConnectionUtils" ref="connectionUtils"/><property name="name" value="zhangsan"/><property name="sex" value="1"/><property name="money" value="100.3"/>--> <!--<constructor-arg index="0" ref="connectionUtils"/><constructor-arg index="1" value="zhangsan"/><constructor-arg index="2" value="1"/><constructor-arg index="3" value="100.5"/>--> <!--name:按照参数名称注入,index按照参数索引位置注入--> <constructor-arg ref="connectionUtils" name="connectionUtils"/> <constructor-arg name="name" value="zhangsan"/> <constructor-arg name="sex" value="1"/> <constructor-arg name="money" value="100.6"/> <!--set注入注入复杂数据类型--> -<property name="myArray"> <array> </property> -<property name="myMap"> -<map> <entry value="value1" key="key1"/> <entry value="value2" key="key2"/> </map> </property> -<property name="mySet"> -<set> <value>set1</value> <value>set2</value> </set> </property> -<property name="myProperties"> -<props> <prop key="prop1">value1</prop> <prop key="prop2">value2</prop> </props> </property> </bean>
XML和注解模式注入
@Componene注解去注解关联的bean标签,在类上加注解
针对不同的层面有三个别名@Controller@Service@Reposittory这四个注解完全一样
一个区分而已。
@Autowired加在属性上按照类型注入(按照你给的类型)
如果一个接口有多个实现类可以增加@Qualifier使用制定具体id
@Resource按照名称注入时jdk的注解。jdk11移除(不建议使用)使用spring推荐的@Autowired
使用注解要使用配置开启注解扫描。<context>标签
// @Autowired 按照类型注入 ,如果按照类型无法唯一锁定对象,可以结合@Qualifier指定具体的id @Autowired @Qualifier("accountDao") private AccountDao accountDao;
纯注解,使用java配置类
使用@Configuration标志这个类为配置类
使用@ComponentScan扫描配置
@PropertySourrce配置外部的配置(jdbc配置文件)
@Value变量赋值
@Bean
// @Configuration 注解表明当前类是一个配置类 @Configuration @ComponentScan({"com.lagou.edu"}) @PropertySource({"classpath:jdbc.properties"}) /*@Import()*/ public class SpringConfig { @Value("${jdbc.driver}") private String driverClassName; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password;
把返回的对象加入ioc容器
多个配置类可以使用improt标记一个为启动入口。
javase启动 启动类加载
web启动xml内的监听器