java的SSM三大件学习
SSM的一些学习
ioc:控制反转,资源控制权交给框架
di:依赖(你要用的东西)注入,扫描各个包之间的依赖关系
Ioc di 容器:
注册注解:
组件:带方法的对象
@Bean注解:自己写的组件,将其放到容器里
组件的定义与获取
@Bean(可放别名) //别名定义后就不能用原名,否则报错
public 类型 方法名 ()
{
new一个对象;
return这个对象;//交给框架来注册,统一管理
}
意义:想要依赖不用一直new,解耦,改代码只需要考虑我要这个对象,自动注入依赖
一般写法:
@Autowired //自动注入
Person person;
本质:Person p = ioc.getBean(名称/类型.class); 按名或类取 //没对象报错nosuchbean。。。。
此法仅适用存在且唯一bean// 多个getbeansof这个方法
detail:组件名要求全局唯一:如果重复了将用最先写的那个组件
@Configuration:管理bean?把bean集中管理
@ComponentScan(“com.xxx.service”) //扫包注解
@ComponentScan(basePackageClasses = PostService.class) //扫包,其实启动注解中已有,但这个可以指定具体扫的包
//@SpringBootApplication这个只能扫自己和子类包 //如果放在最外层就不太用写componentscan了
@Import 导入第三方包组件/(maven里的)
@Scope 由于组件默认单实例 //有时候需要非单实例就用如下代码 @Lazy啥时候用组件啥时候创建对象
@Service
@Scope(“prototype”)
public class UserService {}
FactoryBean:统一产出难写的bean // 不是很懂,用到再说
@Conditional:@Conditional(调用环境类接口) 先写一个环境类,里面加判断逻辑
位于@bean的上方,满足环境要求就可以注册组件
public class MyCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// 从配置文件读取
String value = context.getEnvironment().getProperty("feature.enable");
//配置里面拿一个key=feature.enable的值
// 只有为 true 才加载
return "true".equals(value);
}
}
@Configuration
public class AppConfig {
@Bean
@Conditional(MyCondition.class)
public String testBean() {
System.out.println("✅ Bean 被创建了");
return "Hello Conditional";
}
}
注入注解:
@Autowired //自动注入
@Autowired
private PostMapper postMapper; // 名postMapper
找到同类型多个bean? 按名称来找,否则报错 (先找类,后找名)
//硬要多个可用list or map 接受(目前不懂用)
@Qualifier(bean名称)指定唯一bean //autowired上方标注 //精确指定
@Primary bean上面标注,设置为主组件,即默认bean
@Resource也是自动注入,相较于Autowired适用于更多框架,通用性强
构造器注入
@Service
public class PostService {
private final PostMapper postMapper;
// 构造器注入
public PostService(PostMapper postMapper) {
this.postMapper = postMapper;
}
}
这与自动注入的区别在于:
auto:通常是你要用某个bean的方法,spring去容器里给你拿个bean
构造器:通常是创建新bean时要用到老bean,找到老bean注入
setter方法注入// auto一个函数注入 不太清楚//看作含组件函数调用了 //函数写在类内
@value 赋值注解,用来给组件赋值,主要有以下功能
@Value(字面量) //字面赋值操作
@Value (“${配置文件里取变量}”) //application.property里面写的 名=值
@Value (“java表达式”) //函数调用,数值运算式等
配置文件中取不到? 默认值写法:@Value(变量名:默认值) 取不到变量用默认
@PropertySource(classpath:路径文件)如为了方便管理配个cat.property(路径写完整)//尽量标到使用处
ResouceUtil
多环境
@Profile(“环境标识”) //定义 默认环境:default
这个注解不仅可以用来限制组件,还可以用来限制类!
激活方法:properties里面来配
spring.profiles.active=环境名
properties 文件语法规则:key=value 所以按换行区分一条语句结束
当没有注解时,还可以原生方式使用ioc容器 //
生命周期:
一个bean的周期:创建组件->构造器->注入->bean初始化方法init->执行->destroy销毁->bean结束
单元测试
tips:测试组件是否注册成功无需重新new ioc;可以在主程序test包下先@Autowired 注入后@Test下写测试方法 打jar包时只打包main,多个@Test的执行顺序并不固定
@SpringBootTest
public class BeanTest {
@Autowired
private String testBean; // 这部分需要自己拿要注入的bean
@Test
public void testBean() {
System.out.println(testBean);
}
}录标题)
更多推荐

所有评论(0)