1.入门
- 新建web项目,导入spring相关jar包,并添加核心配置文件
applicationContext.xml
如下:
<?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
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.itlike.demo1"/>
</beans>
2.第一个Demo
- User
@Component("user") //相当于bean id=""
public class User {
public String name;
}
- applicationContext.xml
<?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
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.itlike.demo1"/>
</beans>
- UserTest
public class UserTest {
@Test
public void test(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
User user =(User) app.getBean("user");
System.out.println(user); //有地址说明已经获取了对象!
}
}
3.注入属性值
- User
@Component("user") //相当于bean id=""
public class User {
//使用value注解注入属性值
@Value("Hello Spring!")
public String name;
}
- applicationContext.xml不变
- UserTest
System.out.println(user.name); //Hello Spring!
4.衍生注解
- 为了更好的进行分层,Spring可以使用其它三个注解,功能类似
- 目前使用哪一个功能都一样, 后期可能会添加一些属于各自的属性
@Controller
–>web层@Service
–>service层@Repository
–>dao层
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
} //甚至可以使用Service、Repository
如图,也可以使用Controller实现相同的作用,目的是更好的进行MVC分层。
5.属性注入
- @Value
设置普通属性值
- @Autowired
设置对象类型的属性值,直接使用这种方式,是按照类型完全属性注入;
Dog:
@Component("dog")
public class Dog {
@Value("wc")
public String name;
}
User:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
//这是按照类型的完全属性注入
@Autowired
public Dog dog;
}
UserTest:
System.out.println(user.dog.name); //wc
- 但是,习惯上我们是按照名称完成属性注入的。如下:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
@Resource(name="dog") /*根据名称注入*/
public Dog dog;
}
- @Scope
设置单例模式、多例模式
@Controller("user")
@Scope("singleton") /*prototype*/
public class User {
...
}
6.生命周期
- @PostConstruct(初始化方法)
- @PreDestroy(销毁方法)
User:
@Controller("user")
public class User {
@Value("Hello Spring!")
public String name;
@Resource(name="dog") /*根据名称注入*/
public Dog dog;
@PostConstruct
public void init(){
System.out.println("init ---");
}
@PreDestroy
public void destroy(){
System.out.println("destroy ---");
}
}
UserTest:
@Test
public void test(){
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
User user =(User) app.getBean("user");
System.out.println(user.name); //Hello Spring!
System.out.println(user.dog.name); //wc
app.close();
/* result:
init ---
Hello Spring !
wc
destroy ---
*/
}
7.效益最大化(少数使用)
- XML与注解比较
- XML可以适用任何场景 ,结构清晰,维护方便
- 注解不是自己提供的类使用不了,开发简单方便
- XML与注解整合开发
- XML管理Bean
- 注解完成属性注入
- 使用过程中, 可以不用扫描,扫描是为了类上的注解
- 在没有扫描的情况下, 使用属性注解@Resource @Value @Autowired @Qulifier
- 步骤如下:
applicationContext.xml:
<?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
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.itlike.demo1"/>-->
<!--在不扫描的情况下,可以使用属性注入的注解-->
<context:annotation-config/>
<bean id="person" class="com.itlike.demo1.Person"/>
</beans>
Person:
public class Person {
@Value("zs")
public String name;
}
PersonTest:
public class PersonTest {
@Test
public void test(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person =(Person) app.getBean("person");
System.out.println(person.name); //zs
}
}