使用注解前的准备:
1.导入约束
2.配置注解的支持:contexnt:annotation-config/
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:contexnt="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-2.5.xsd">
<contexnt:annotation-config/>
</beans>
@Autowired:zu直接上属性上面使用
使用该注解后可以省略set方法,但是自动装配的属性在IOC容器中要存在,而已名字也要向对应
Autowired的属性required默认为true:说明在注入的时候这个对象必须存在,否则就会报错
当设置为false时:有值的情况就正常注入,如果对象不存在时(注入为空值),就会跳过也不会报错
如果bean标签里面出现了多个类型相同但是名字不同的情况,如下
<bean id="dog1" class="pojo.Dog"/>
<bean id="dog2" class="pojo.Dog"/>
<bean id="cat2" class="pojo.Cat"/>
<bean id="cat1" class="pojo.Cat"/>
此时光光是一个Autowired注解是无法实现自动装配的,所以就要引用Qualifier来实现指定id名字来进行装配,如下
@Autowired
@Qualifier(value = "cat1")
private Cat cat;
@Autowired
@Qualifier(value = "dog1")
private Dog dog;
@Component:组件,放在类的上面,说明了这个类被spring管理了,也就是以前xml文件中bean标签里面的内容
@Value:相当对bean里面的属性赋值(可以放在属性的上面,也可以放在这个属性的set方法上面)
web开发的三层架构来分层
@component
- dao:@Repository
- service:@service
- controller:@Controller
以上四个注解的功能相同,都是把这个来放到spring中注册,并装配成bean,只是使用的位置不同
总结:
xml和注解:
xml的实用性更强,更加灵活,维护方便了些
注解实在类上面进行操作,使用起来简单,但是不是自己的类就无法使用了,维护复杂
xml:管理bean
注解:负责属性的注入(要让支持注解:开启注解的驱动支持,扫描指定的包让其注解生效)
完全使用Java来使用spring(07)
摒弃xml配置,只使用java来配置(JavaConfig)——注解实现(结构模式和xml配置相同)
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@ComponentScan("hui.pojo")
@Import(MyConfig2.class)
public class MyConfig {
@Bean
public User user(){
return new User();
}
}
@Configuration:放在一个类的上面,并被spring进行接管,并注册到容器中
@Import:代表几个config.java配合使用
@ComponentScan:表示扫描路径下的包,并进行自动装配到spring的bean容器中
@bean:放在方法的上面,相当于xml文件中的bean标签
方法的名字相当于bean标签的id属性
方法的返回值相当于注入bean的对象