最后更新时间:2020年9月17日19:11:25
必须导入AOP;
必须在配置文件添加context约束和开启注解支持;
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 = "訾博";
}
<?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);
}
}
訾博
@Component:用于把当前类作为存入spring容器中;
属性:value用于指定bean的id,当我们不写时,默认为当前类名,首字母小写;
例如:
@Component("user")
@Controller:一般用在表现层;
@Service:一般用在业务层;
@Repository:一般用在持久层;
上面三个注解跟Component的作用是一模一样的,它们三个是spring框架为三层提供的明确注解,使三层对象看起来更清晰;
用在方法上,方法返回值即是所注入的bean;
用于注入基本类型和String类型;
复杂类型(集合、自定义类型等)使用xml配置;
可以用在属性和set方法上,同样用在属性上时set方法不是必须的;
value指定数据的值,它可以使用spring中的SpEL表达式(也就是Spring的EL表达式);
${表达式};
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;
}
訾博
单例模式:singleton;
多例模式:prototype;
web相关,暂不多做赘述;
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
更加万能,适用于任何场合,维护方便;
不是自己的类是用不了,维护相对复杂;
xml用来管理bean;
注解只负责完成属性的注入;
一定要导入AOP、开启注解的支持以及扫描包;