最后更新时间:2020年9月17日19:11:25
目录
一、前述
1、使用注解开发的两个条件
2、环境搭建
第一步:新建一个Moudle,并创建实体类User
第二步:新建配置文件applicationContext.xml
第三步:编写测试类
测试结果:
二、Bean的注入
1、@Component注解
2、代码示例(见环境搭建)
3、@Bean注解
三、属性的注入
1、@Value注解
作用:
属性:
SpEL的写法:
2、@Value注解演示
第一步:修改实体类User
测试结果:
四、自动装配注解
五、作用域
1、@Scope注解
取值:
2、示例代码
第一步:修改User类
修改测试类:
测试结果:
六、总结
1、xml与注解
xml:
注解:
2、xml与注解的最佳实践
3、注意
一、前述
1、使用注解开发的两个条件
必须导入AOP;
必须在配置文件添加context约束和开启注解支持;
2、环境搭建
第一步:新建一个Moudle,并创建实体类User
package com.zibo.pojo;
import org.springframework.stereotype.Component;
//等价于:<bean id="user" class="com.zibo.pojo.User"/>
//@Component:组件
@Component
public class User {
public String name = "訾博";
}
第二步:新建配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描,所指定包下所有注解都会被扫描到-->
<context:component-scan base-package="com.zibo"/>
<!--开启注解支持-->
<context:annotation-config/>
</beans>
第三步:编写测试类
package com.zibo;
import com.zibo.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user", User.class);
System.out.println(user.name);
}
}
测试结果:
訾博
二、Bean的注入
1、@Component注解
@Component:用于把当前类作为存入spring容器中;
属性:value用于指定bean的id,当我们不写时,默认为当前类名,首字母小写;
例如:
@Component("user")
@Controller:一般用在表现层;
@Service:一般用在业务层;
@Repository:一般用在持久层;
上面三个注解跟Component的作用是一模一样的,它们三个是spring框架为三层提供的明确注解,使三层对象看起来更清晰;
2、代码示例(见环境搭建)
3、@Bean注解
用在方法上,方法返回值即是所注入的bean;
三、属性的注入
1、@Value注解
作用:
用于注入基本类型和String类型;
复杂类型(集合、自定义类型等)使用xml配置;
可以用在属性和set方法上,同样用在属性上时set方法不是必须的;
属性:
value指定数据的值,它可以使用spring中的SpEL表达式(也就是Spring的EL表达式);
SpEL的写法:
${表达式};
2、@Value注解演示
第一步:修改实体类User
package com.zibo.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//等价于:<bean id="user" class="com.zibo.pojo.User"/>
//@Component:组件
@Component
public class User {
//等价于<property name="name" value="訾博"/>
@Value("訾博")
public String name;
}
测试结果:
訾博
四、自动装配注解
(见【Spring】005-Bean的自动装配)
五、作用域
1、@Scope注解
取值:
单例模式:singleton;
多例模式:prototype;
web相关,暂不多做赘述;
2、示例代码
第一步:修改User类
package com.zibo.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
//等价于:<bean id="user" class="com.zibo.pojo.User"/>
//@Component:组件
@Component
@Scope("prototype")
public class User {
//等价于<property name="name" value="訾博"/>
@Value("訾博")
public String name;
}
修改测试类:
package com.zibo;
import com.zibo.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = context.getBean("user", User.class);
User user1 = context.getBean("user", User.class);
System.out.println(user == user1);
}
}
测试结果:
false
六、总结
1、xml与注解
xml:
更加万能,适用于任何场合,维护方便;
注解:
不是自己的类是用不了,维护相对复杂;
2、xml与注解的最佳实践
xml用来管理bean;
注解只负责完成属性的注入;
3、注意
一定要导入AOP、开启注解的支持以及扫描包;